|
Драйвер MMC для uClinux, снова. |
|
|
|
May 21 2006, 08:59
|

Их либе дих ...
     
Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609

|
Решил я воспользоваться драйвером MMC/SD карты "немца" для uClinux. Вот только беда, похоже что он для ядра 2.6. Не подскажите как мне его с ядром 2.4 подружить. Пока при компиляции получаю ошибки: Код mmc.c: In function `mod_init': mmc.c:383: error: too few arguments to function `register_blkdev' mmc.c:394: error: structure has no member named `first_minor' mmc.c:396: error: void value not ignored as it ought to be mmc.c:407: error: structure has no member named `queue' mmc.c:408: error: structure has no member named `disk_name'
Прикрепленные файлы
mmc.rar ( 3.28 килобайт )
Кол-во скачиваний: 67
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
May 21 2006, 10:45
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
В версии 2.5.x и далее в 2.6 была переработана подсистема, отвечающая за работу с блочными устройствами -> изменилась процедура регистрации устройств. Действительно, register_blkdev теперь принимает не 3 параметра (как в 2.4), а только два. Кроме того, в 2.6 несколько изменился подход к обработке очереди запросов ввода-вывода в блочных устройствах. Итого, нужно переписать bd_request, mod_init и mod_exit. Чтобы разобраться как это сделать, могу посоветовать посмотреть на примеры к книжкам Linux Device Drivers, 3rd Edition и 2nd Edition. И сравнить описанные в них процедуры инициализации модуля и обработки очереди. Они похожи, но несколько отличаются. Цитата Зараза, собрал старый драйвер, без проблем, но на этапе его активации получаю : Ключи компиляции и линковки не менялись? Такая ругань идет на неразрешенные ссылки на функции, которые должно экспортировать ядро. Но либо они не экспортируются, либо ссылки некорректны, что может быть результатом неправильной линковки или компиляции.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 21 2006, 11:15
|

Их либе дих ...
     
Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609

|
Цитата(makc @ May 21 2006, 13:45)  Ключи компиляции и линковки не менялись?
Такая ругань идет на неразрешенные ссылки на функции, которые должно экспортировать ядро. Но либо они не экспортируются, либо ссылки некорректны, что может быть результатом неправильной линковки или компиляции. Ключи компиляции не менял, порылся по скриптам, дополнил свои флаги компиляции, не помогло  Смущает меня строчка во флагах "-I/usr/Xilinx/EDK8.1/gnu/microblaze/lin/bin/../lib/gcc/microblaze/3.4.1/./include" своим ".."
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
May 21 2006, 13:04
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ May 21 2006, 15:15)  Ключи компиляции не менял, порылся по скриптам, дополнил свои флаги компиляции, не помогло Смущает меня строчка во флагах "-I/usr/Xilinx/EDK8.1/gnu/microblaze/lin/bin/../lib/gcc/microblaze/3.4.1/./include" своим ".." Нет, тут ничего страшного нет. ".." в пути - совершенно нормальная ситуация, т.к. это лишь ссылка на каталог уровнем выше и ничего больше. Цитата(3.14 @ May 21 2006, 15:31)  Сейчас у меня вот такой makefile получился: Все на первый взгляд на месте. Могу посоветовать посмотреть с помощью mb-objdump списки символов, которые значатся relocatables в таблице символов adapter.o и сравнить эти списки с данными экспортов ядра, т.е. его symtab.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 21 2006, 13:34
|

Их либе дих ...
     
Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609

|
Цитата(makc @ May 21 2006, 16:04)  Все на первый взгляд на месте. Могу посоветовать посмотреть с помощью mb-objdump списки символов, которые значатся relocatables в таблице символов adapter.o и сравнить эти списки с данными экспортов ядра, т.е. его symtab. А как мне этот symtab посмотреть? Еще, попробовал собрать драйвер EthernetLite, makefile такой же. На этапе insmod получаю: # insmod ./ethlite.o Using ./ethlite.o insmod: unresolved symbol __umodsi3 И никаких " Unhandled relocation" ...
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
|
May 21 2006, 13:36
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ May 21 2006, 17:34)  Цитата(makc @ May 21 2006, 16:04)  Все на первый взгляд на месте. Могу посоветовать посмотреть с помощью mb-objdump списки символов, которые значатся relocatables в таблице символов adapter.o и сравнить эти списки с данными экспортов ядра, т.е. его symtab.
А как мне этот symtab посмотреть? Обычно после сборки он лежит в корневом каталоге исходников ядра в файле System.map. Но его можно с помощью того же mb-objdump получить из незапакованного бинарника ядра, если мне не изменяет память. Ну и в рантайме - файл /proc/ksyms.
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 21 2006, 14:43
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ May 21 2006, 17:50)  Посмотрел /proc/ksyms, названий полученных из mb-objdump не нашел. Тогда нужно разбираться с правильность заголовочных файлов, которые используются при компиляции модуля. Они могут быть одной из проблем... Цитата Еще, по поводу ethernetlite драйвера, чего-то я не пойму. Насколько я понимаю в драйвере отсутсвует функция (или переменная) __umodsi3, которая каким то макаром должна в нем появится из каких-то либ. Иду в директорию $(ROOTDIR)/linux-2.4.x/lib, в самом корне лежит libz.a (символическая ссылка куда-то) а в ней первым объявлением идет эта самая __umodsi3 ... Эта функция выполняет вычисление целочисленного остатка от деления 32-х раздрядных чисел. И она действительно должна быть в одной из библиотек. Указанная ссылка libz.a - это статически линкуемая библиотека, подозреваю, что она аналогична libgcc. Т.е. эта функция при линковке может быть взята и из нее, хотя ее может предоставить ядро. А каких именно функций нет в экспортах ядра, но есть в adapter.o? Можно увидеть вывов mb-objdump для adapter.o?
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 21 2006, 17:03
|

Гуру
     
Группа: Админы
Сообщений: 3 621
Регистрация: 18-10-04
Из: Москва
Пользователь №: 904

|
Цитата(3.14 @ May 21 2006, 21:01)  Не понял, эта функция (cfgaddr_read) объявлена и описана в теле драйвера, разве она еще должна в какой то либе фигурировать? Эх, мне бы еще исходник этого драйвера.  Кстати, а получаемый после компиляции и линковки бинарник через elf2flt прогонялся? Если мне не изменяет память, то без этого работать не будет...
--------------------
BR, Makc В недуге рождены, вскормлены тленом, подлежим распаду. (с) У.Фолкнер.
|
|
|
|
|
May 21 2006, 17:18
|

Их либе дих ...
     
Группа: СуперМодераторы
Сообщений: 2 010
Регистрация: 6-09-04
Из: Russia, Izhevsk
Пользователь №: 609

|
Только не пугайся  , это франкенштейн. Цитата(makc @ May 21 2006, 20:03)  Кстати, а получаемый после компиляции и линковки бинарник через elf2flt прогонялся? Если мне не изменяет память, то без этого работать не будет... Я такие "слова" в первый раз слышу  , ничего такого преднамеренно я не делал.
Прикрепленные файлы
mmc.rar ( 9.46 килобайт )
Кол-во скачиваний: 26
--------------------
Усы, борода и кеды - вот мои документы :)
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|