The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
rk30xxnand, !*! pavel_simple, 19-Янв-14, 11:10  [смотреть все]
исходники модуля rk30xxnand отсутствуют.

при загрузке в force режиме ругается на
"rk30xxnand_ko: version magic '3.0.36+ SMP preempt mod_unload ARMv7 ' should be '3.0.36+ SMP mod_unload ARMv7 '"

я конечно наугад попробывал
cat ./rk30xxnand-3.0.36.ko | sed 's|vermagic=3.0.36+ SMP preempt mod_unload ARMv7 |vermagic=3.0.36+ SMP mod_unload ARMv7 \x00       |g'>rk30xxnand-3.0.36+.ko

теперь оно даже пытается грузиться, НО
'rk30xxnand_ko: Unknown symbol _raw_spin_unlock_irq (err 0)'


собственно вопрос :
я правильно понимаю что это не вылечить никак кроме как пересобрать ядро под "нужды" модуля

особенно приветствуются коменты от pavinux'а и skb7, кито ещё ядерщики?

  • rk30xxnand, !*! skb7, 18:15 , 19-Янв-14 (1) +1
    >[оверквотинг удален]
    > я конечно наугад попробывал
    > cat ./rk30xxnand-3.0.36.ko | sed 's|vermagic=3.0.36+ SMP preempt mod_unload
    > ARMv7 |vermagic=3.0.36+ SMP mod_unload ARMv7 \x00      
    >  |g'>rk30xxnand-3.0.36+.ko
    > теперь оно даже пытается грузиться, НО
    > 'rk30xxnand_ko: Unknown symbol _raw_spin_unlock_irq (err 0)'
    > собственно вопрос :
    > я правильно понимаю что это не вылечить никак кроме как пересобрать ядро
    > под "нужды" модуля
    > особенно приветствуются коменты от pavinux'а и skb7, кито ещё ядерщики?

    Мне кажется вот что происходит:

    1. Модуль собран для ядра с включенным preemption, а ваше ядро собрано без preemption. Включается это через CONFIG_PREEMPT.

    2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда выключен -- они вырождаются в пустой код. Подробнее тут http://landley.net/kdocs/htmldocs/kernel-locking.html:


    For kernels compiled without CONFIG_SMP, and without CONFIG_PREEMPT spinlocks do not exist at all.


    3. Таким образом, в вашем ядре не экспортируется символ (функция) _raw_spin_unlock_irq, а модуль требует, чтобы такая функция присутствовала в таблице символов ядра. Поэтому при попытке загрузить модуль (даже с обманом типа "modprobe --force") происходит ошибка линковки и модуль не может быть загружен.


    Так что да, вариантов тут только два: пересобирать модуль под ваше ядро или пересобирать ядро под модуль. И поскольку исходников модуля нет, остается один вариант. Оцените все прелести проприетарных драйверов, как говорится.

    Хотя с другой стороны не совсем понятно, зачем было отключать вытеснение в ядре. Проверьте у себя:


    $ grep CONFIG_PREEMPT /boot/config-3.12-1-amd64
    $ grep CONFIG_SMP /boot/config-3.12-1-amd64
    $ grep _raw_spin_unlock_irq /proc/kallsyms


    или можно в каталоге исходников ядра (после сборки):


    $ grep CONFIG_PREEMPT .config
    $ grep CONFIG_SMP .config
    $ grep _raw_spin_unlock_irq System.map


    И вывод этих команд сюда.
    В конечном итоге вам придется собрать ядро с такой же конфигурацией, как собран модуль.

    • rk30xxnand, !*! pavel_simple, 18:55 , 19-Янв-14 (2)
      >[оверквотинг удален]
      >>  |g'>rk30xxnand-3.0.36+.ko
      >> теперь оно даже пытается грузиться, НО
      >> 'rk30xxnand_ko: Unknown symbol _raw_spin_unlock_irq (err 0)'
      >> собственно вопрос :
      >> я правильно понимаю что это не вылечить никак кроме как пересобрать ядро
      >> под "нужды" модуля
      >> особенно приветствуются коменты от pavinux'а и skb7, кито ещё ядерщики?
      > Мне кажется вот что происходит:
      > 1. Модуль собран для ядра с включенным preemption, а ваше ядро собрано
      > без preemption. Включается это через CONFIG_PREEMPT.

      совершенно верно
      > 2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда
      > выключен -- они вырождаются в пустой код. Подробнее тут http://landley.net/kdocs/htmldocs/kernel-locking.html:
      >

       
      > For kernels compiled without CONFIG_SMP, and without CONFIG_PREEMPT spinlocks do not exist
      > at all.
      >

      вот собственно сам ответ которого мой гугл мне не показал, а конкретно что символ вообще отсутствует как клас вне CONFIG_PREEMPT.

      > 3. Таким образом, в вашем ядре не экспортируется символ (функция) _raw_spin_unlock_irq,
      > а модуль требует, чтобы такая функция присутствовала в таблице символов ядра.
      > Поэтому при попытке загрузить модуль (даже с обманом типа "modprobe --force")
      > происходит ошибка линковки и модуль не может быть загружен.

      я надеялся было что этот символ может быть добавлен отдельно модулем.

      >[оверквотинг удален]
      >

      > или можно в каталоге исходников ядра (после сборки):
      >

       
      > $ grep CONFIG_PREEMPT .config
      > $ grep CONFIG_SMP .config
      > $ grep _raw_spin_unlock_irq System.map
      >

      > И вывод этих команд сюда.
      > В конечном итоге вам придется собрать ядро с такой же конфигурацией, как
      > собран модуль.

      спасибо за столь развёрнутый ответ. ядро я уже водрузил модуль грузиться, робит.

      • rk30xxnand, !*! pavel_simple, 12:51 , 20-Янв-14 (3)
        >[оверквотинг удален]
        >> или можно в каталоге исходников ядра (после сборки):
        >>
         
        >> $ grep CONFIG_PREEMPT .config
        >> $ grep CONFIG_SMP .config
        >> $ grep _raw_spin_unlock_irq System.map
        >>

        >> И вывод этих команд сюда.
        >> В конечном итоге вам придется собрать ядро с такой же конфигурацией, как
        >> собран модуль.
        > спасибо за столь развёрнутый ответ. ядро я уже водрузил модуль грузиться, робит.

        а ещё... а ещё можно было создать пустой модуль экспортирующий эти символы.

        P.S.
        что-то до меня туговато стало доходить - старею однака.

    • rk30xxnand, !*! pavlinux, 03:45 , 21-Янв-14 (4)
      > 2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда
      > выключен -- они вырождаются в пустой код.

      Ну это они там придумывают, на многозадачных системах совсем без спинлоков низя.

      • rk30xxnand, !*! skb7, 00:29 , 22-Янв-14 (12)
        >> 2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда
        >> выключен -- они вырождаются в пустой код.
        > Ну это они там придумывают, на многозадачных системах совсем без спинлоков низя.

        Да, я не полностью написал. Это если SMP выключено и preemtion тоже выключен, тогда спинлоки не используются. Если 2+ проца и конфигурация SMP, но вытеснения отключено, спинлоки всё равно нужны.

        • rk30xxnand, !*! pavlinux, 00:53 , 22-Янв-14 (14)
          >>> 2. Спинлоки, насколько я знаю, работают только когда preemption включен, а когда
          >>> выключен -- они вырождаются в пустой код.
          >> Ну это они там придумывают, на многозадачных системах совсем без спинлоков низя.
          > Да, я не полностью написал. Это если SMP выключено и preemtion тоже
          > выключен, тогда спинлоки не используются. Если 2+ проца и конфигурация SMP,
          > но вытеснения отключено, спинлоки всё равно нужны.

          Почти все блокировки имеющие суффикс *_irq, без SMP, без PREEMPT превращаются в irq_diasble()/irq_enable()  

  • rk30xxnand, !*! pavlinux, 03:52 , 21-Янв-14 (5)
    > я правильно понимаю что это не вылечить никак кроме как

    Дарю :) https://github.com/aloksinha2001/Linux3188/blob/master/drive...

    Тут ещо много полезного http://www.linux-rockchip.info/

    • rk30xxnand, !*! pavel_simple, 07:19 , 21-Янв-14 (6)
      >> я правильно понимаю что это не вылечить никак кроме как
      > Дарю :) https://github.com/aloksinha2001/Linux3188/blob/master/drive...

      эта не тот драйвер, хотя из этого репо не тестил -- посмотрю.

      > Тут ещо много полезного http://www.linux-rockchip.info/

      был, да. ещё ~ 15 репо на github облазил.

      • rk30xxnand, !*! pavlinux, 15:35 , 21-Янв-14 (7)
        >>> я правильно понимаю что это не вылечить никак кроме как
        >> Дарю :) https://github.com/aloksinha2001/Linux3188/blob/master/drive...
        > эта не тот драйвер, хотя из этого репо не тестил -- посмотрю.

        # modinfo ./rk30xxnand.ko покаж?
        Там в комменте 29 API должно быть.

        ---


        modinfo ./rk30xxnand.ko
        filename:       ./rk30xxnand.ko
        description:    FTL layer for SLC and MlC nand flash on RK29xx SDK boards
        author:         ZYF <zyf@rock-chips.com>
        license:        
        alias:          rk29xxnand
        depends:        
        vermagic:       3.0.8+ SMP preempt mod_unload ARMv7

        Дривер, что по ссылке - GPL_ный, так что, вполне могли чего-нить и урезать.  

        • rk30xxnand, !*! pavel_simple, 16:44 , 21-Янв-14 (8)
          >[оверквотинг удален]
          > description:    FTL layer for SLC and MlC nand flash
          > on RK29xx SDK boards
          > author:         ZYF <zyf@rock-chips.com>
          > license:
          > alias:          rk29xxnand
          > depends:
          > vermagic:       3.0.8+ SMP preempt mod_unload ARMv7
          >
          > Дривер, что по ссылке - GPL_ный, так что, вполне могли чего-нить и
          > урезать.

          filename:       /lib/modules/3.0.36+/misc/rk30xxnand-3.0.36.ko
          description:    FTL layer for SLC and MlC nand flash on RK29xx SDK boards
          author:         ZYF <zyf@rock-chips.com>
          license:        
          alias:          rk29xxnand
          depends:        
          vermagic:       3.0.36+ SMP preempt mod_unload ARMv7


          я проверю palinux, спасибо.

          а вообще драйвером таким конечно страшно пользоваться -- ниже dmesg при загрузке оного.

          [164114.870117] gp_rknand_info = : 0xf0d86000
          [164114.870344] request IRQ_NANDC irq , ret=0.........
          [164114.870475] FlashCopyProgBuf1=0xc190c000
          [164114.870505] ATime: 40 ns AHB: 148 timming: 1081
          [164114.870521] No.1 FLASH INFO:45 d7 84 93 72
          [164114.871031] ATime: 32 ns AHB: 148 timming: 1061
          [164114.871274] ATime: 32 ns AHB: 148 timming: 1061
          [164114.871285] randomizer = 1 , EccBits = 28 pSpec->pReadRetrial = bf161b78
          [164114.994411] FTL INFO:Version = 438,Date = 20121229
          [164114.994422] totalLogicBlkRaw  = 874
          [164114.994460] gBootMedia = 0 gSdmmcFwPartOffset =0!
          [164114.994469] rknand_buffer.c version: 4.38 20121130!
          [164114.994643] add_rknand_device:
          [164114.994669] 5 cmdlinepart partitions found on MTD device rk29xxnand
          [164114.994700] num_partitions = 5
          [164114.994709] Creating 5 MTD partitions on "rk29xxnand":
          [164114.994721] 0x000000000000-0x000000400000 : "parameter"
          [164114.998907] mtd: Giving out device 0 to parameter
          [164115.001478] 0x000000400000-0x000000800000 : "misc"
          [164115.003730] MTD_open
          [164115.005618] mtd: Giving out device 1 to misc
          [164115.007016] 0x000000800000-0x000001000000 : "kernel"
          [164115.008003] mtd: Giving out device 2 to kernel
          [164115.011433] 0x000001000000-0x000002000000 : "boot"
          [164115.012181] mtd: Giving out device 3 to boot
          [164115.017071] 0x000002000000-0x0000da800000 : "recovery"
          [164115.021303] MTD_open
          [164115.021758] mtd: Giving out device 4 to recovery
          [164115.025625] MTD_open
          [164115.027715] MTD_open
          [164115.027748] MTD_open
          [164115.028343] [<c0bb4ef0>] (unwind_backtrace+0x0/0xe0) from [<bf166884>] (GetRemap+0x174/0x1e4 [rk30xxnand_ko])
          [164115.028447] [<bf166884>] (GetRemap+0x174/0x1e4 [rk30xxnand_ko]) from [<bf166b50>] (FtlSetSysProtAddr+0x28/0x2f4 [rk30xxnand_ko])
          [164115.028538] [<bf166b50>] (FtlSetSysProtAddr+0x28/0x2f4 [rk30xxnand_ko]) from [<bf16c928>] (rk29nand_probe+0x194/0x210 [rk30xxnand_ko])
          [164115.028598] [<bf16c928>] (rk29nand_probe+0x194/0x210 [rk30xxnand_ko]) from [<c0ba9604>] (do_one_initcall+0x90/0x160)
          [164115.028623] [<c0ba9604>] (do_one_initcall+0x90/0x160) from [<c0c06d04>] (sys_init_module+0x15b8/0x171c)
          [164115.028644] [<c0c06d04>] (sys_init_module+0x15b8/0x171c) from [<c0baeac0>] (ret_fast_syscall+0x0/0x30)
          [164115.028705] [<c0bb4ef0>] (unwind_backtrace+0x0/0xe0) from [<bf166884>] (GetRemap+0x174/0x1e4 [rk30xxnand_ko])
          [164115.028788] [<bf166884>] (GetRemap+0x174/0x1e4 [rk30xxnand_ko]) from [<bf166b80>] (FtlSetSysProtAddr+0x58/0x2f4 [rk30xxnand_ko])
          [164115.028870] [<bf166b80>] (FtlSetSysProtAddr+0x58/0x2f4 [rk30xxnand_ko]) from [<bf16c928>] (rk29nand_probe+0x194/0x210 [rk30xxnand_ko])
          [164115.028932] [<bf16c928>] (rk29nand_probe+0x194/0x210 [rk30xxnand_ko]) from [<c0ba9604>] (do_one_initcall+0x90/0x160)
          [164115.028954] [<c0ba9604>] (do_one_initcall+0x90/0x160) from [<c0c06d04>] (sys_init_module+0x15b8/0x171c)
          [164115.028977] [<c0c06d04>] (sys_init_module+0x15b8/0x171c) from [<c0baeac0>] (ret_fast_syscall+0x0/0x30)
          [164115.028996] startBlk = 1  sysProtAddr = 0
          [164115.030583] MTD_ioctl
          [164115.030998] MTD_close
          [164115.031345] MTD_ioctl
          [164115.031841] MTD_ioctl
          [164115.032326] MTD_close
          [164115.032953] MTD_close
          [164115.033683] MTD_ioctl
          [164115.035316] MTD_ioctl
          [164115.035728] MTD_close
          [164115.035947] MTD_close

          даже чего-то читает, причём судя по всему правильно
          # cat /dev/mtdblock0 | md5sum
          498f8d852d8371d8ed9e833cc6e147b5  -
          # cat /dev/mtdblock0 | md5sum
          498f8d852d8371d8ed9e833cc6e147b5  -

          • rk30xxnand, !*! pavlinux, 17:10 , 21-Янв-14 (9)
            > а вообще драйвером таким конечно страшно пользоваться -- ниже dmesg при загрузке
            > оного.

            Похоже у тя отладочная инфа включена, да и CONFIG_PRINTK_TIME можно выкинуть, quiet прописать.

            ---
            > даже чего-то читает, причём судя по всему правильно

            Вот они, 5 разделов

            [164114.994669] 5 cmdlinepart partitions found on MTD device rk29xxnand
            [164114.994700] num_partitions = 5
            [164114.994709] Creating 5 MTD partitions on "rk29xxnand":
            [164114.994721] 0x000000000000-0x000000400000 : "parameter"
            [164114.998907] mtd: Giving out device 0 to parameter
            [164115.001478] 0x000000400000-0x000000800000 : "misc"
            [164115.003730] MTD_open
            [164115.005618] mtd: Giving out device 1 to misc
            [164115.007016] 0x000000800000-0x000001000000 : "kernel"
            [164115.008003] mtd: Giving out device 2 to kernel
            [164115.011433] 0x000001000000-0x000002000000 : "boot"
            [164115.012181] mtd: Giving out device 3 to boot
            [164115.017071] 0x000002000000-0x0000da800000 : "recovery"

            • rk30xxnand, !*! pavlinux, 17:19 , 21-Янв-14 (10)
              > Похоже у тя отладочная инфа включена

              А.... вон глядь, в начале дривера


              #if 1
                 #define FLASH_DEBUG(x...) do { printk(x); } while(0)
              #else
                 #define FLASH_DEBUG(s,x...)
              #endif

              Собственно заменяется на

              #if 0

              или что-нить феншуйное:

              #ifdef CONFIG_DEBUG_KERNEL

              А еще круче в drivers/mtd/nand/Kconfig прописать после раздела "config MTD_NAND_RK29"


              config MTD_NAND_RK29_DEBUG
                      bool "Debugging NAND Flash RK29XX"
                      depends on MTD_NAND_RK29
                      help
                        This enables the printk info from the RK29XX NAND

              А в дривер вписать


              #ifdef CONFIG_MTD_NAND_RK29_DEBUG
                 #define FLASH_DEBUG(x...) do { printk(x); } while(0)
              #else
                 #define FLASH_DEBUG(s,x...)
              #endif

              • rk30xxnand, !*! skb7, 00:27 , 22-Янв-14 (11)
                А почему не использовать dev_dbg()/pr_debug(), а потом включать нужный отладочный функционал через debugfs? Как это работает описано тут: http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g...

                На этапе разработки удобно в таком случае просто сделать в самом верху драйвера:


                #define DEBUG


                и все dev_dbg()/pr_debug() будут работать как printk(). А когда драйвер уже работает -- удаляем эту строчку и пользователь сможет сам включать через debugfs, что ему нужно.

                • rk30xxnand, !*! pavlinux, 00:50 , 22-Янв-14 (13)
                  > А почему не использовать

                  Github такой большой, форкай всех и исправляй!

                  • rk30xxnand, !*! skb7, 01:29 , 22-Янв-14 (15)
                    >> А почему не использовать
                    > форкай всех

                    Какой искрометный юмор! Долго придумывали? :)

                    • rk30xxnand, !*! pavel_simple, 07:21 , 22-Янв-14 (16)
                      >>> А почему не использовать
                      >> форкай всех
                      > Какой искрометный юмор! Долго придумывали? :)

                      Парни, прошу не портить друг-другу настроение и не пить кровь. Я только начал было радоваться что хоть кто-то на отупнете начал понимать ядерную физику окромя сетевой части.

                      • rk30xxnand, !*! pavlinux, 14:36 , 22-Янв-14 (17)
                        >>>> А почему не использовать
                        >>> форкай всех
                        >> Какой искрометный юмор! Долго придумывали? :)
                        > Парни, прошу не портить друг-другу настроение и не пить кровь. Я только
                        > начал было радоваться что хоть кто-то на отупнете начал понимать ядерную
                        > физику окромя сетевой части.

                        Спокуха, мы любя.

                      • rk30xxnand, !*! skb7, 17:05 , 22-Янв-14 (18)
                        >>>> А почему не использовать
                        >>> форкай всех
                        >> Какой искрометный юмор! Долго придумывали? :)
                        > Парни, прошу не портить друг-другу настроение и не пить кровь. Я только
                        > начал было радоваться что хоть кто-то на отупнете начал понимать ядерную
                        > физику окромя сетевой части.

                        Да мы прикалываемся, не принимайте близко к сердцу ;)




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру