将驱动编译成.ko文件添加到嵌入式Linux系统下

为减少内核所占的空间,很多时候我们在编译内核时都会选择裁去一些暂时不用的驱动,当我们在使用时找不到对应的驱动,除了重新编译内核外,一个比较方便的做法是将对应的驱动编译成.ko文件(模块),再添加到系统下。

下面介绍两种编译.ko文件的方法,以nanoPi M3板子为例:

编译平台:Ubuntu


一、直接使用源码编译

首先获取源码的驱动程序,以给板子添加joydev的驱动为例,找到驱动源码joydev.c,将其放到一个新建文件夹下,编写相应Makefile文件,其中KERNEL_PATH是内核源码的目录。

Makefile

obj-m := joydev.o
KERNEL_PATH := /home/wali/Documents/nano-m3/linux-3.4.y/
PWD := $(shell pwd)
all:  
        make -C $(KERNEL_PATH) M=$(PWD) modules  
clean:  
        make -C $(KERNEL_PATH) M=$(PWD) clean  


设置交叉编译器:

编辑文件 ~/.bashrc,将交叉编译器位置添加进来(或者编译时指定编译器)


执行命令更新文件(点号过来有个空格)

. ~/.bashrc

执行命令查看编译器是否设置完成

arm-linux-gcc -v


准备好后即可开始编译了,在该文件夹下执行

make ARCH=arm

编译完成后可以看到当前文件夹下出现了.ko文件



二、Kernel下编译内核模块

首先进入Kernel目录,使用

make menuconfig

进入Kernel配置界面,找到joydev相关配置位置


我们到上面指示的位置去,将Joystick interface勾选为模块


退出后在Kernel目录下新建一个名为modules_install的文件夹

执行命令

make modules

make INSTALL_MOD_PATH=./modules_install/ modules_install


编译完成后可以在相应文件夹下看到joydev.ko文件



最后,我们只要将编译出来的.ko文件复制到板子中,在文件所在目录下使用

sudo insmod *.ko (sudo insmod joydev.ko)

或者将.ko文件放到 /lib/modules/#uname -r#/ 目录下,其中 uname -r 对应你的内核版本


然后执行以下命令

depmod

就可以使用以下指令来加载了

sudo modprobe -v 模块名称 (sudo modprobe -v joydev)

将相关设备接入板子,就可以找到该设备。


卸载模块:

如果是使用 insmod 安装的模块,使用以下指令卸载模块

 sudo rmmode 模块名称 (sudo rmmod joydev)

如果是使用 modprobe 安装的模块,使用以下指令卸载模块

 sudo modprobe -r -v 模块名称 (sudo modprobe -r -v joydev)


猜你喜欢

转载自blog.csdn.net/qq_25556149/article/details/79284563
今日推荐