Jump to content

    

Прикрутить стандарный драйвер к новой шине

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

 

В общем итоге, драйвер в виде модуля я собрал, 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!

 

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

Share this post


Link to post
Share on other sites
WARNING: "aaaa" [.../Linux/Drivers/m8_hub/m8_hub.ko] undefined!

 

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

 

Уметь то умеет, ясное дело, но на сколько я помню, это всего лишь варнинг, .ko все равно собирается, с этим символом.

Share this post


Link to post
Share on other sites

Сейчас вот приделал совсем красиво, чтобы драйвер сам детектировал 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 адрес функции, которая ничего не делает. И тогда все без ругани работает.

Edited by Hoodwin

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this