imx6ull驱动开发经验

1、背景

      imx6ull驱动开发基于正点原子的开发板,上面运行linux 4.1.15内核,根文件系统为ubuntu 16.05.5 LTS.

2、加载驱动文件chrdevbase.ko文件时,先使用depmod生成依赖文件时,提示无modules.order, modules.builtin无这两个文件。

解决办法:modules.order可以从驱动生成的目录中复制,modules.builtin可以从编译完成的linux内核源码根据目录获取即可。

zsm@imx6ull:/lib/modules/4.1.15$ depmod
depmod: WARNING: could not open /lib/modules/4.1.15/modules.order: No such file or directory
depmod: WARNING: could not open /lib/modules/4.1.15/modules.builtin: No such file or directory
zsm@imx6ull:/lib/modules/4.1.15$ ls -l
total 40
-rw-rw-r-- 1 zsm zsm 5465 Oct 26 01:34 chrdevbase.ko
-rw-r--r-- 1 zsm zsm   45 Oct 26 01:35 modules.alias
-rw-r--r-- 1 zsm zsm   12 Oct 26 01:35 modules.alias.bin
-rw-r--r-- 1 zsm zsm    0 Oct 26 01:35 modules.builtin.bin
-rw-r--r-- 1 zsm zsm   15 Oct 26 01:35 modules.dep
-rw-r--r-- 1 zsm zsm   51 Oct 26 01:35 modules.dep.bin
-rw-r--r-- 1 zsm zsm   52 Oct 26 01:35 modules.devname
-rw-r--r-- 1 zsm zsm   55 Oct 26 01:35 modules.softdep
-rw-r--r-- 1 zsm zsm   49 Oct 26 01:35 modules.symbols
-rw-r--r-- 1 zsm zsm   12 Oct 26 01:35 modules.symbols.bin
zsm@imx6ull:/lib/modules/4.1.15$ modprobe chrdevbase.ko
modprobe: ERROR: ../libkmod/libkmod.c:514 lookup_builtin_file() could not open builtin file '/lib/modules/4.1.15/modules.builtin.bin'
modprobe: FATAL: Module chrdevbase.ko not found in directory /lib/modules/4.1.15

3、探测驱动文件insmod chrdevbase.ko时提供Invalid module format,失败信息通dmesg查看提示为驱动程序版本与内核版本不一样,内核版本为4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 ,而驱动文件chrdevbase.ko的版本为4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8。查看驱动文件的信息可以使用modinfo 模块名。


root@imx6ull:/lib/modules/4.1.15# insmod chrdevbase.ko
insmod: ERROR: could not insert module chrdevbase.ko: Invalid module format
root@imx6ull:/lib/modules/4.1.15# file chrdevbase.ko
chrdevbase.ko: ELF 32-bit LSB relocatable, ARM, EABI5 version 1 (SYSV), BuildID[sha1]=db1f490c8b622fc8dfbc484a15918ab56e0e9e8e, not stripped
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15#
root@imx6ull:/lib/modules/4.1.15# dmesg
[ 2636.034265] chrdevbase: version magic '4.1.15 SMP preempt mod_unload modversions ARMv6 p2v8 ' should be '4.1.15 SMP preempt mod_unload modversions ARMv7 p2v8 '

解决办法:重新配置内核,修改为只选择ARMv7, 通过menuconfig修改,如下图:编译内核后再编译驱动程序就可以了。

 4、安装newchrled模块时,提示Invalid argument,通过详细查看dmesg提示newchrled: Unknown symbol device_create (err -22),即是无法从内核符号表中找到函数device_create。这个问题是由于板子上运行的内核中符号表中device_create函数没有或对应不上,我这个板子运行的内核是在家中电脑上编译出来,目前测试的驱动文件是在公司的电脑上编译出来,两个内核源代码有细微一的区别导致的。

root@imx6ull:/lib/modules/4.1.15# modprobe newchrled
modprobe: ERROR: could not insert 'newchrled': Invalid argument
root@imx6ull:/lib/modules/4.1.15# ls -l
total 124
-rwxrwxr-x 1 zsm  zsm  10990 Oct 26 03:42 chr
-rw-rw-r-- 1 zsm  zsm   5747 Oct 26 06:11 chrdevbase.ko
-rwxrwxr-x 1 zsm  zsm  10663 Oct 26 08:51 led
-rw-rw-r-- 1 zsm  zsm   6107 Oct 26 07:43 led.ko
-rw-r--r-- 1 root root    45 Oct 26 09:28 modules.alias
-rw-r--r-- 1 root root    12 Oct 26 09:28 modules.alias.bin
-rw-rw-r-- 1 zsm  zsm  18104 Oct 26 03:42 modules.builtin
-rw-r--r-- 1 root root 20446 Oct 26 09:28 modules.builtin.bin
-rw-r--r-- 1 root root    37 Oct 26 09:28 modules.dep
-rw-r--r-- 1 root root   145 Oct 26 09:28 modules.dep.bin
-rw-r--r-- 1 root root    52 Oct 26 09:28 modules.devname
-rw-rw-r-- 1 zsm  zsm     71 Oct 26 03:42 modules.order
-rw-r--r-- 1 root root    55 Oct 26 09:28 modules.softdep
-rw-r--r-- 1 root root    49 Oct 26 09:28 modules.symbols
-rw-r--r-- 1 root root    12 Oct 26 09:28 modules.symbols.bin
-rw-rw-r-- 1 zsm  zsm   7311 Oct 26 09:28 newchrled.ko
root@imx6ull:/lib/modules/4.1.15# dmesg
[ 8309.174306] kernel senddata ok!
[ 8389.320054] kernel senddata ok!
[ 8504.563661] chrdevbase exit!
[ 8515.614554] chrdevbase init!
[ 8527.479044] kernel send data ok!
[ 8538.832405] kernel send data ok!
[ 9146.225007] chrdevbase exit!
[20325.294426] newchrled: disagrees about version of symbol device_create
[20325.294459] newchrled: Unknown symbol device_create (err -22)
[20325.294487] newchrled: disagrees about version of symbol device_destroy
[20325.294500] newchrled: Unknown symbol device_destroy (err -22)

 解决办法:把公司电脑编译生成的内核zImage下载到板子中解决此问题。

4、hexdump命令的安装, hexdump命令是bsdmainutils软件包中的提供的,可以使用apt-get install bsdmainutils安装后即可以获得hexdump命令。

5、ubuntu 18.04系统,硬件intel i7,系统启动后是默认是不加载usb转串口驱动程序ftdio_sio.ko文件,可以修改modules.conf文件增加,如下图。

猜你喜欢

转载自blog.csdn.net/fhqlongteng/article/details/127537591