为减少内核所占的空间,很多时候我们在编译内核时都会选择裁去一些暂时不用的驱动,当我们在使用时找不到对应的驱动,除了重新编译内核外,一个比较方便的做法是将对应的驱动编译成.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)