Заголовки - те самые для сборки модулей???

Тема в разделе "Raspberry Pi", создана пользователем Igor68, 24 фев 2023.

  1. Igor68

    Igor68 Гуру

    Дошли руки до малин(давно купленных)... и... в /usr/src не увидел linux-headers-XXXX:confused:
    Куда они подевались? Вот версия:
    Код (Text):
    bot_gray@pi03:/ $ uname -a
    Linux pi03 4.9.35-v7+ #1014 SMP Fri Jun 30 14:47:43 BST 2017 armv7l GNU/Linux
     
    Странно. На всех машинах с Debian есть, а тут нет. Ядро конечно старенькое, да и гнаться за новыми лень.
    Драйвер для самодельного USB - устройства надо делать Устройство на at91sam7s256. заготовка драйвера на основе usb-sceleton.c ну и куча всяких примеров.
    Если не затруднит поделитесь исходниками именно этого ядра - как говориться ткните носом где брать. Можно конечно в "кернел" слазить (там брал 4.8.6 для платы и 2.6.27) лучше конечно заголовки. У меня на малине:
    Код (Text):
    root@pi03:/usr/src# ls -l
    total 12
    drwxr-xr-x 4 root root 4096 Apr  7  2018 linux-headers-3.6-trunk-common
    drwxr-xr-x 4 root root 4096 Apr  7  2018 linux-headers-3.6-trunk-rpi
    lrwxrwxrwx 1 root root   23 Sep  1  2014 linux-kbuild-3.6 -> ../lib/linux-kbuild-3.6
    drwxr-xr-x 3 root root 4096 Mar  3  2017 sense-hat
    root@pi03:/usr/src#
     
    В поисковике ссылка:
    Код (Text):
    http://phil.lavin.me.uk/downloads/linux-headers-rpi/
    Но именно искомой версии нет.
     
    Последнее редактирование: 24 фев 2023
  2. Igor68

    Igor68 Гуру

    Вот и не знаю как быть. Вчера на одной малине принудительно обновил ядро. Номер не запомнил... какой-то 6.XX.XX (старое уже не поддерживается). Свалил wifi, но ethernet остался. Я говорю про третью, а рабочий сервер на малине 4 с 8 Гб ОЗУ. На ней же и диск USB на 1 Тб. Там у меня всё: (и GCC, и всякие даташиты через Apache и QEMU - всё работает и я доболен) И smb и nfs. И там же исходники (можно собирать и не с root правами). А вот модули загружаются, как и всегда, с root. Для платы at91sam9260 собирал и ядро 4.8.6 и модули для него. Малина 4 только по ssh и никаких дисплеев и клавиатур.

    Если кому интересно - сборка модулей:
    - наличие исходников ядра (именно для чего собирается модуль). Там есть Makefile(в нём есть всё, что надо), которым будет пользоваться наш Makeable (где-то в нашей директории, рядом с исходниками модуля)
    - примерный наш Makefile:
    Код (Bash):
    #
    obj-m := samhid.o  #указываем имя (он же и имя модуля - совпадает с именем файла Си)

    ##
    ## тут указываем компилятор (хоть кросс)
    #CROSS_COMPILE  := arm-none-eabi- #указал для платы at91sam9260
    CROSS_COMPILE   := #не указали - значит родной наш и для нашей системы
    #!!!! !указать путь к исходникам(заголовкам) ядра!!!
    #KSRC           := ../linux-4.8.6-CH-S_00.01 #заголовки для платы at91sam9260
    KSRC            := ../../linux-headers-5.10.103-v7l+ # заголовки для малины 4
    #ARCH           := arm #архитектура, если надо

    all: modules

    modules:
            #$(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) modules
            $(MAKE) -C $(KSRC) M=$(shell pwd) modules

    clean:
            #$(MAKE) ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KSRC) M=$(shell pwd) clean
            $(MAKE) -C $(KSRC) M=$(shell pwd) clean
    - не забыть сначала сконфигурировать исходники ядра make menuconfig но если заголовки ядра, то там всё готово
    - поле сбоки модуль (файл с расширением .ko) будет лежать рядом с исходником модуля - всё зависит от Вашего Makefile
    - испытать (с правами root) загрузить: insmod <имя модуля.ko> выгрузить: rmmod <имя модуля> после того как модуль отлажен и готов к применению - читайте про modprobe

    PS: примеров куча... но исходники и/или заголовки ядра обязательны... версии соблюдать!!! Но собирают само ядро бывает и без контроля версий... Именно само ядро собирают. Посмотреть параметры модуля по modinfo. Пример:
    Код (Text):
    igor@Irpi4:~/coding/GCC/at91sam9260_board/rtl8192eu-linux-driver $ modinfo 8192eu.ko
    filename:       /home/igor/coding/GCC/at91sam9260_board/rtl8192eu-linux-driver/8192eu.ko
    version:        v5.6.4_35685.20191108_COEX20171113-0047
    author:         Realtek Semiconductor Corp.
    description:    Realtek Wireless Lan Driver
    license:        GPL
    srcversion:     1EFCDB75C630E976057E1BC
    #тут видно какие устройства USB подхватит этот драйвер(модуль)
    alias:          usb:v2C4Ep0104d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2C4Ep0100d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2019pAB33d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2357p0126d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2357p0109d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2357p0108d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2357p0107d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2001p3319d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v2001p3312d*dc*dsc*dp*ic*isc*ip*in*
    alias:          usb:v0BDAp818Cd*dc*dsc*dp*icFFiscFFipFFin*
    alias:          usb:v0BDAp818Bd*dc*dsc*dp*icFFiscFFipFFin*
    depends:        cfg80211 #это значит этот драйвер(модуль) зависит от cfg80211 - значит его надо загрузить до драйвера
    vermagic:       4.8.6 mod_unload ARMv5 p2v8 #тут собсвенно версия (процессор, ядро, компилятор)
    parm:           rtw_wireless_mode:int
    parm:           rtw_ips_mode:The default IPS mode (int)
    parm:           rtw_lps_level:The default LPS level (int)
    parm:           rtw_lps_chk_by_tp:int
    parm:           rtw_max_bss_cnt:int
    parm:           rtw_usb_rxagg_mode:int
    parm:           rtw_dynamic_agg_enable:int
    parm:           rtw_tx_bw_mode:The max tx bw for 2.4G and 5G. format is the same as rtw_bw_mode (uint)
    parm:           rtw_rx_ampdu_sz_limit_1ss:RX AMPDU size limit for 1SS link of each BW, 0xFF: no limitation (array of uint)
    parm:           rtw_rx_ampdu_sz_limit_2ss:RX AMPDU size limit for 2SS link of each BW, 0xFF: no limitation (array of uint)
    parm:           rtw_rx_ampdu_sz_limit_3ss:RX AMPDU size limit for 3SS link of each BW, 0xFF: no limitation (array of uint)
    parm:           rtw_rx_ampdu_sz_limit_4ss:RX AMPDU size limit for 4SS link of each BW, 0xFF: no limitation (array of uint)
    parm:           rtw_rf_config:int
    parm:           rtw_country_code:The default country code (in alpha2) (charp)
    parm:           rtw_channel_plan:The default chplan ID when rtw_alpha2 is not specified or valid (int)
    parm:           rtw_excl_chs:exclusive channel array (array of uint)
    parm:           rtw_btcoex_enable:BT co-existence on/off, 0:off, 1:on, 2:by efuse (int)
    parm:           rtw_ant_num:Antenna number setting, 0:by efuse (int)
    parm:           rtw_qos_opt_enable:int
    parm:           ifname:The default name to allocate for first interface (charp)
    parm:           if2name:The default name to allocate for second interface (charp)
    parm:           rtw_wowlan_sta_mix_mode:int
    parm:           rtw_pwrtrim_enable:int
    parm:           rtw_initmac:charp
    parm:           rtw_special_rf_path:int
    parm:           rtw_chip_version:int
    parm:           rtw_rfintfs:int
    parm:           rtw_lbkmode:int
    parm:           rtw_network_mode:int
    parm:           rtw_channel:int
    parm:           rtw_mp_mode:int
    parm:           rtw_wmm_enable:int
    parm:           rtw_vrtl_carrier_sense:int
    parm:           rtw_vcs_type:int
    parm:           rtw_busy_thresh:int
    parm:           rtw_ht_enable:int
    parm:           rtw_bw_mode:int
    parm:           rtw_ampdu_enable:int
    parm:           rtw_rx_stbc:int
    parm:           rtw_rx_ampdu_amsdu:int
    parm:           rtw_tx_ampdu_amsdu:int
    parm:           rtw_lowrate_two_xmit:int
    parm:           rtw_power_mgnt:int
    parm:           rtw_smart_ps:int
    parm:           rtw_low_power:int
    parm:           rtw_wifi_spec:int
    parm:           rtw_full_ch_in_p2p_handshake:int
    parm:           rtw_antdiv_cfg:int
    parm:           rtw_antdiv_type:int
    parm:           rtw_drv_ant_band_switch:int
    parm:           rtw_single_ant_path:int
    parm:           rtw_switch_usb_mode:int
    parm:           rtw_enusbss:int
    parm:           rtw_hwpdn_mode:int
    parm:           rtw_hwpwrp_detect:int
    parm:           rtw_hw_wps_pbc:int
    parm:           rtw_check_hw_status:int
    parm:           rtw_max_roaming_times:The max roaming times to try (uint)
    parm:           rtw_mc2u_disable:int
    parm:           rtw_notch_filter:0:Disable, 1:Enable, 2:Enable only for P2P (uint)
    parm:           rtw_hiq_filter:0:allow all, 1:allow special, 2:deny all (uint)
    parm:           rtw_adaptivity_en:0:disable, 1:enable (uint)
    parm:           rtw_adaptivity_mode:0:normal, 1:carrier sense (uint)
    parm:           rtw_adaptivity_th_l2h_ini:th_l2h_ini for Adaptivity (int)
    parm:           rtw_adaptivity_th_edcca_hl_diff:th_edcca_hl_diff for Adaptivity (int)
    parm:           rtw_amplifier_type_2g:BIT3:2G ext-PA, BIT4:2G ext-LNA (uint)
    parm:           rtw_amplifier_type_5g:BIT6:5G ext-PA, BIT7:5G ext-LNA (uint)
    parm:           rtw_RFE_type:default init value:64 (uint)
    parm:           rtw_powertracking_type:default init value:64 (uint)
    parm:           rtw_GLNA_type:default init value:0 (uint)
    parm:           rtw_TxBBSwing_2G:default init value:0xFF (uint)
    parm:           rtw_TxBBSwing_5G:default init value:0xFF (uint)
    parm:           rtw_OffEfuseMask:default open Efuse Mask value:0 (uint)
    parm:           rtw_FileMaskEfuse:default drv Mask Efuse value:0 (uint)
    parm:           rtw_rxgain_offset_2g:default RF Gain 2G Offset value:0 (uint)
    parm:           rtw_rxgain_offset_5gl:default RF Gain 5GL Offset value:0 (uint)
    parm:           rtw_rxgain_offset_5gh:uint
    parm:           rtw_rxgain_offset_5gm:default RF Gain 5GM Offset value:0 (uint)
    parm:           rtw_pll_ref_clk_sel:force pll_ref_clk_sel, 0xF:use autoload value (uint)
    parm:           rtw_tx_pwr_by_rate:0:Disable, 1:Enable, 2: Depend on efuse (int)
    parm:           rtw_tx_pwr_lmt_enable:0:Disable, 1:Enable, 2: Depend on efuse (int)
    parm:           rtw_target_tx_pwr_2g_a:2.4G target tx power (unit:dBm) of RF path A for each rate section, should match the real calibrate power, -1: undefined (array of int)
    parm:           rtw_target_tx_pwr_2g_b:2.4G target tx power (unit:dBm) of RF path B for each rate section, should match the real calibrate power, -1: undefined (array of int)
    parm:           rtw_target_tx_pwr_2g_c:2.4G target tx power (unit:dBm) of RF path C for each rate section, should match the real calibrate power, -1: undefined (array of int)
    parm:           rtw_target_tx_pwr_2g_d:2.4G target tx power (unit:dBm) of RF path D for each rate section, should match the real calibrate power, -1: undefined (array of int)
    parm:           rtw_tsf_update_pause_factor:num of bcn intervals to stay TSF update pause status (int)
    parm:           rtw_tsf_update_restore_factor:num of bcn intervals to stay TSF update restore status (int)
    parm:           rtw_phy_file_path:The path of phy parameter (charp)
    parm:           rtw_load_phy_file:PHY File Bit Map (int)
    parm:           rtw_decrypt_phy_file:Enable Decrypt PHY File (int)
    parm:           rtw_en_napi:int
    parm:           rtw_iqk_fw_offload:int
    parm:           rtw_ch_switch_offload:int
     
     
  3. parovoZZ

    parovoZZ Гуру

    всегда где-то там жили. Может пропил да забыл?
     
  4. ZAZ-965

    ZAZ-965 Гуру

    Igor68 нравится это.
  5. Igor68

    Igor68 Гуру

    спасибо! судя по началу Makefile именно эта версия.
     
  6. Igor68

    Igor68 Гуру

    версия вроде та... но вот испытанный на разных платформах тестовый исходник при компиляции даёт:
    Код (Text):
    root@pi02:/home/igor/sdb/MOUNT_RPI4/modules/testmod2# make
    make ARCH=arm CROSS_COMPILE= -C /usr/src/linux-headers-4.9.35-v7+ M=/home/igor/sdb/MOUNT_RPI4/modules/testmod2 modules
    make[1]: Entering directory '/usr/src/linux-headers-4.9.35-v7+'
      CC [M]  /home/igor/sdb/MOUNT_RPI4/modules/testmod2/lkm_example.o
    /bin/sh: 1: -Wp,-MD,/home/igor/sdb/MOUNT_RPI4/modules/testmod2/.lkm_example.o.d: not found
    scripts/Makefile.build:299: recipe for target '/home/igor/sdb/MOUNT_RPI4/modules/testmod2/lkm_example.o' failed
    make[2]: *** [/home/igor/sdb/MOUNT_RPI4/modules/testmod2/lkm_example.o] Error 127
    Makefile:1490: recipe for target '_module_/home/igor/sdb/MOUNT_RPI4/modules/testmod2' failed
    make[1]: *** [_module_/home/igor/sdb/MOUNT_RPI4/modules/testmod2] Error 2
    make[1]: Leaving directory '/usr/src/linux-headers-4.9.35-v7+'
    Makefile:10: recipe for target 'all' failed
    make: *** [all] Error 2
     
    по ходу надо ихний Makefile пилить
     
  7. Igor68

    Igor68 Гуру

    я сам дурак! увлёкся кроос-компиляцией и многого не заметил. Взял свой пример для родной сборки (на платформе для себя) вот Makefile (сборка двух модулей):
    Код (Text):

    #
    obj-m += mod0.o
    obj-m += mod1.o

    all:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
    clean:
            make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
     
    ну и модуль(modinfo одного из модулей):
    Код (Text):
    igor@pi02:~/sdb/MOUNT_RPI4/modules/testmod3 $ modinfo mod0.ko
    filename:       /home/igor/sdb/MOUNT_RPI4/modules/testmod3/mod0.ko
    version:        1.01
    description:    mod0 testing.
    author:         Igor D: 19.08.2021
    license:        GPL
    srcversion:     5B0FFD8B89FB9FE15AF89CB
    depends:      
    vermagic:       4.9.35-v7+ SMP mod_unload modversions ARMv7 p2v8
     
    а это dmesg:
    Код (Text):
    [132205.290128] mod0: loading out-of-tree module taints kernel.
    [132205.290863] mod0 module loaded
    [132256.796198] Namaskar: ofcd registered
    [132256.797753] mod1 module loaded!
     
    и устройство в /dev (ls /dev -l):
    Код (Text):
    crw------- 1 root root    242,   0 Feb 26 18:11 test_mod1
     
    Собралось на малине 3 на примонтированном по nfs диск USB на малине 4 и загрузилось на малине 3.
    Спасибо @ZAZ-965 ! Теперь можно что-то делать - ведь устройство USB должно работать именно на малине 3.
     
  8. Igor68

    Igor68 Гуру

    Доброго времени суток!
    ...а есть ли возможность поправить репозиторий, в смысле изменить /etc/apt/sources.list?
    Вдруг стал нужен automake есть кое-что и надо собрать для:
    Код (Text):
    4.1.19+ #858 Tue Mar 15 15:52:03 GMT 2016 armv6l GNU/Linux
    PS: Это не для того кому я задал вопрос(@ZAZ-965), а для тех кто говорит: "А вот Я...": Самое простое, конечно, это переставить систему... но я не такой модник, чтобы по первому дуновению ветерка бросаться переустанавливать систему, тем более что устройство в сети и является частью её(от неё зависят другие устройства в сети). Да и вообще маникюр и педикюр я не делаю, ногти тоже не крашу... только подстригаю их когда отрастают, как и все нормальные люди.
     
    Последнее редактирование: 29 авг 2023
  9. ZAZ-965

    ZAZ-965 Гуру

    @Igor68, старые версии перенесены в из archive.raspbian.org (bookworm/bullseye/buster) в legacy.raspbian.org (wheezy/stretch/jessie). Т.е в sources.list поменять archive.raspbian.org или mirrordirector.raspbian.org на legacy.raspbian.org.
     
    Igor68 нравится это.
  10. Igor68

    Igor68 Гуру

    Спасибо Дружище!!! Обновляется - процесс идёт!
    Спасибо!