реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Прикрутить стандарный драйвер к новой шине
Hoodwin
сообщение Feb 21 2013, 18:15
Сообщение #31


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Говорю же, добился не я, а дядьки, которые сочиняли проект linux-c6x. sm.gif

В общем итоге, драйвер в виде модуля я собрал, platform_device из него зарегистрировал, устройство (UART внешний) теперь поднимается при insmod и вполне себе живет.
Прикрутил еще vlynq_device на шину, теперь на шине есть device вида /sys/bus/vlynq/devices/<dev-id>/

Что-то только проморгал я, где надо было зарегистрировать и что, чтобы было вида /sys/bus/vlynq/<bus_no>/devices/<dev-id>/.
Но пока это не страшно, так как шина все равно одна. Но правильнее, когда там номер стоит, в некоторых чипах бывают по два кора VLYNQ (кто их видел?).



Цитата
Как я понимаю, все unresolved external там есть. А правильный он или нет, разбирается insmod, и ругается, если что. А отличие от ".o" лишь в одной букве расширения.


Не, на этапе сборки оно тоже разбирается. Сделал просто функцию aaaa, и вот:
Код
__modpost: vmlinux .../Linux/Drivers/m8_hub/m8_hub.o  [.../Linux/Drivers/m8_hub/m8_hub.o FORCE]
  MODPOST 1 modules
WARNING: "aaaa" [.../Linux/Drivers/m8_hub/m8_hub.ko] undefined!


так что умеет оно видеть ссылки, что не в ядре.
Go to the top of the page
 
+Quote Post
SM
сообщение Feb 21 2013, 18:34
Сообщение #32


Гуру
******

Группа: Свой
Сообщений: 7 946
Регистрация: 25-02-05
Из: Moscow, Russia
Пользователь №: 2 881



Цитата(Hoodwin @ Feb 21 2013, 22:15) *
WARNING: "aaaa" [.../Linux/Drivers/m8_hub/m8_hub.ko] undefined!

так что умеет оно видеть ссылки, что не в ядре.


Уметь то умеет, ясное дело, но на сколько я помню, это всего лишь варнинг, .ko все равно собирается, с этим символом.
Go to the top of the page
 
+Quote Post
Hoodwin
сообщение Feb 22 2013, 14:28
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 881
Регистрация: 21-03-10
Из: _// \\_
Пользователь №: 56 107



Сейчас вот приделал совсем красиво, чтобы драйвер сам детектировал UART'ы, сам конструировал их platfrom_data, а потом вызывал pltform_device_register. С регистрацией проблем нет. Все поднимается и работает. А вот с rmmod вылезла какая-то бяка:
Код
m8_hub 00:c004: removing serial ports
------------[ cut here ]------------
WARNING: at .../linux-c6x/drivers/base/core.c:131 device_release+0xcc/0xe4()
Device 'serial8250.1' does not have a release() function, it is broken and must be fixed.
Modules linked in: m8_hub(-) [last unloaded: m8_hub]
Stack from 85083d74:
        80398484 800200c4 8033ccb1 80350245 00000083 801e453c 87f4f708 87eb5e00
        87f4f728 80020134 00000014 00000000 00000000 80350281 85083db8 801e453c
        80350281 87eb5780 87f4f7a0 87f4f7a4 87f4f708 80190bec 0000026b 87f4f724
        87f586e8 8706c53c 0000026b 80192508 801ec3c0 85083f68 85083de8 87053d80
        8706c508 87f580a4 87f585e4 87f586da 87069f00 85083f68 801e92e4 87053d80
        87f4f600 8706c508 8706c508 801e9418 0000026b 8706c508 87f586e8 801e9e6c
Call trace: [<800200c4>] warn_slowpath_common+0x84/0xa8
[<801e453c>] device_release+0xcc/0xe4
[<80020134>] warn_slowpath_fmt+0x2c/0x40
[<801e453c>] device_release+0xcc/0xe4
[<80190bec>] kobject_release+0x74/0xf4
[<80192508>] kref_put+0x8c/0x148
[<801ec3c0>] platform_device_unregister+0x1c/0x34
[<87f580a4>] m8_hub_remove+0xa4/0xe0 [m8_hub]
[<801e92e4>] driver_sysfs_remove+0x34/0x6c
[<801e9418>] __device_release_driver+0xfc/0x11c
[<801e9e6c>] driver_detach+0xfc/0x110
[<801e9160>] bus_remove_driver+0xc8/0x168
[<87f58588>] m8_hub_exit+0x48/0x80 [m8_hub]
[<80062e64>] sys_delete_module+0x3b0/0x444
[<8009ac08>] sys_newstat+0x50/0x68
[<80007a3c>] ret_from_syscall_function+0x0/0x4

---[ end trace acd3569ad3b12098 ]---
Module m8_hub unloaded!


В интернете накопал, что это проблема драйвера serial8250. Чего оно хочет то глобально? Чтоб device_release был, хоть пустой но присутствовал. или еще чего?

---
А, вот какая штука. все устройства должны за собой уметь подтирать, а если сами не умеют, то "подтиралки" должны быть определены для типов и классов устройств. Сам драйвер serial8250 за собой подтирать не умеет, так как он не знает, кто именно и как выделял память под структуру описания устройства. В итоге нужно просто зарадить в указатель struct device.releade адрес функции, которая ничего не делает. И тогда все без ругани работает.

Сообщение отредактировал Hoodwin - Feb 22 2013, 14:02
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 18:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016