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

 
 
> Petalinux. Kernel module.
doom13
сообщение Apr 6 2016, 20:23
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Приветствую.
Пытаюсь сделать модуль ядра для управления AXI GPIO. По мануалу сгенерил шаблон модуля и вношу в него свои изменения. Отлаживаю работу модуля в QEMU. При загрузке модуля (insmod) выполняется функция инициализации (printk в консоль выводит сообщение) в ней происходит вызов platform_driver_register(&axi_gpio_platform_driver), которая должна "пнуть" вызов axi_gpio_probe(), но вызов axi_gpio_probe() почему-то не происходит (сообщение printk в консоль о выполнении axi_gpio_probe() не выводятся). При этом platform_driver_register(&axi_gpio_platform_driver) возвращает 0.
В чём может быть проблема?

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
nill
сообщение Apr 8 2016, 07:57
Сообщение #2


Частый гость
**

Группа: Validating
Сообщений: 124
Регистрация: 10-08-05
Пользователь №: 7 502



axi_gpio0_init(void) и axi_gpio0_exit(void) можно выбросить вместе с module_init/module_exit и использовать вместо них макрос module_platform_driver(axi_gpio0_driver). Это не обязательно, но чаще делают именно так - код получается немного проще. В device tree должно быть строка .compatible = "vendor,axi_gpio0". Я бы заменил её на что-нибудь уникальное во избежание накладок.

Цитата(doom13 @ Apr 8 2016, 13:39) *
... не даёт зайти в каталог, переходит сразу в каталог /sys/firmware/devicetree/base (или так и надо?).

Тут ничего не могу сказать, поскольку не работал с petalinux и не знаю, как они там всё устроили. Похоже, что /proc/device-tree - это симлинк, но сути это не меняет. Ищите в /sys, ести Вас туда выводят.
Go to the top of the page
 
+Quote Post
doom13
сообщение Apr 8 2016, 08:06
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(nill @ Apr 8 2016, 10:57) *
axi_gpio0_init(void) и axi_gpio0_exit(void) можно выбросить вместе с module_init/module_exit и использовать вместо них макрос module_platform_driver(axi_gpio0_driver). Это не обязательно, но чаще делают именно так - код получается немного проще.

Спасибо, учту в будущем.
Цитата(nill @ Apr 8 2016, 10:57) *
В device tree должно быть строка .compatible = "vendor,axi_gpio0". Я бы заменил её на что-нибудь уникальное во избежание накладок.

Тут поменял на my_gpio_driver, но всё как и ранее, в probe не заходит.

Цитата(nill @ Apr 8 2016, 10:57) *
Тут ничего не могу сказать, поскольку не работал с petalinux и не знаю, как они там всё устроили. Похоже, что /proc/device-tree - это симлинк, но сути это не меняет. Ищите в /sys, ести Вас туда выводят.

Вот, что есть в /sys/firmware/devicetree/base:
CODE

[ hexdump renice
[[ hostname reset
addgroup httpd rm
adduser hwclock rmdir
ar id rmmod
ash ifconfig route
awk ifdown run-parts
basename ifup run-postinsts
bootlogd inetd runlevel
busybox init runlevel.sysvinit
busybox.nosuid init.sysvinit sed
busybox.suid insmod seq
cat ip setconsole
chattr kill sh
chgrp killall sha1sum
chmod killall5 sha256sum
chown klogd sha3sum
chroot last sha512sum
chvt last.sysvinit shuf
clear lastb shutdown
cmp ldconfig shutdown.sysvinit
cp less sleep
cpio ln sort
cut loadfont start-stop-daemon
date loadkmap stat
dc logger strings
dd login stty
deallocvt logname su
delgroup logread sulogin
deluser losetup swapoff
depmod ls swapon
devmem lsmod switch_root
df md5sum sync
diff mdev sysctl
dirname mesg syslogd
dmesg mesg.sysvinit tail
dnsdomainname microcom tar
du mkdir tee
dumpkmap mkdosfs telinit
dumpleases mkfifo telnet
echo mkfs.vfat telnetd
egrep mknod test
env mkswap tftp
expr mktemp time
false modprobe top
fatattr more touch
fbset mount tr
fdisk mountpoint traceroute
fgrep mountpoint.sysvinit true
find mtd_debug tty
flash_erase mtdinfo udhcpc
flash_eraseall mv udhcpd
flash_lock nanddump umount
flash_otp_dump nandtest uname
flash_otp_info nandwrite uniq
flash_otp_lock netstat unlink
flash_otp_write nice unzip
flash_unlock nohup update-alternatives
flashcp nslookup update-rc.d
flock od upgrade-firmware
free openvt uptime
fsck passwd users
fstab-decode patch usleep
fstrim peek utmpdump
ftpd pidof utmpdump.sysvinit
ftpget pidof.sysvinit vi
ftpput ping vlock
fuser ping6 wall
fwupgrade pivot_root wall.sysvinit
gdbserver poke watch
getopt poweroff watchdog
getty poweroff.sysvinit wc
grep printf wget
groups ps which
gunzip pwd who
gzip rdate whoami
halt readlink xargs
halt.sysvinit realpath yes
hd reboot zcat
head reboot.sysvinit

Go to the top of the page
 
+Quote Post
doom13
сообщение Apr 8 2016, 08:19
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539



Цитата(nill @ Apr 8 2016, 11:08) *
Это имя дожно быть одинаковым в драйвере и device tree. Вы его изменили в device tree? Нашли эту строку в /proc/device-tree (или где она там...)?

Это имя .compatible = "my_gpio_driver", которое задаётся для компатибле???
Цитата(nill @ Apr 8 2016, 11:08) *
В /sys/... что-то не то, device tree выгдядит по-другому

Это похоже
Код
root@peta_test:/sys/firmware/devicetree/base# ls -al
-r--r--r--    1 root     root             4 Jan  1 00:15 #address-cells
-r--r--r--    1 root     root             4 Jan  1 00:15 #size-cells
drwxr-xr-x    8 root     root             0 Jan  1 00:04 .
drwxr-xr-x    3 root     root             0 Jan  1 00:04 ..
drwxr-xr-x    2 root     root             0 Jan  1 00:05 aliases
drwxr-xr-x    8 root     root             0 Jan  1 00:05 amba_pl
drwxr-xr-x    2 root     root             0 Jan  1 00:15 chosen
drwxr-xr-x    4 root     root             0 Jan  1 00:15 clocks
-r--r--r--    1 root     root            16 Jan  1 00:15 compatible
drwxr-xr-x    3 root     root             0 Jan  1 00:15 cpus
drwxr-xr-x    2 root     root             0 Jan  1 00:15 memory
-r--r--r--    1 root     root            10 Jan  1 00:15 model
-r--r--r--    1 root     root             1 Jan  1 00:15 name
root@peta_test:/sys/firmware/devicetree/base#

????
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- doom13   Petalinux. Kernel module.   Apr 6 2016, 20:23
- - nill   platform_driver_register() всего лишь регистрирует...   Apr 7 2016, 08:07
|- - doom13   Цитата(nill @ Apr 7 2016, 11:07) platform...   Apr 7 2016, 08:58
- - doom13   Уточню. Нашёл исходный код platform_driver_registe...   Apr 7 2016, 10:35
- - nill   Цитата(doom13 @ Apr 7 2016, 14:58) Этого ...   Apr 8 2016, 06:53
|- - doom13   Цитата(nill @ Apr 8 2016, 09:53) А вообще...   Apr 8 2016, 07:31
|- - doom13   Цитата(nill @ Apr 8 2016, 09:53) Покажите...   Apr 8 2016, 07:39
- - nill   Вам же говорят, что это каталог Зайдите внутрь, ...   Apr 8 2016, 07:36
- - nill   Это имя дожно быть одинаковым в драйвере и device ...   Apr 8 2016, 08:08
- - nill   ^ Да, это оно. Так, кажется я начал о чём-то догад...   Apr 8 2016, 08:20
|- - doom13   Цитата(nill @ Apr 8 2016, 11:20) Так, каж...   Apr 8 2016, 08:28
- - nill   axi_gpio_0 определён в карте памяти, посмотрите в ...   Apr 8 2016, 08:41
|- - doom13   Цитата(nill @ Apr 8 2016, 11:41) axi_gpio...   Apr 8 2016, 09:30
- - nill   В файле pl.dtsi есть секция axi_gpio_0: gpio@10003...   Apr 9 2016, 06:02
|- - doom13   Цитата(nill @ Apr 9 2016, 09:02) В файле ...   Apr 9 2016, 08:10
- - nill   Других идей у меня, к сожалению, нет. Возможно, чт...   Apr 10 2016, 06:58
- - doom13   RE: Petalinux. Kernel module.   Apr 11 2016, 07:31
|- - nill   Цитата(doom13 @ Apr 11 2016, 14:31) Кодro...   Apr 12 2016, 08:02
- - doom13   nill, cпасибо. Попробую поэкспериментировать с жел...   Apr 12 2016, 09:20


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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 07:43
Рейтинг@Mail.ru


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