首先下载linux-3.14,解压然后进入目录,打开Makefile里面有199行选择编译工具为arm-linux-然后保存退出,然后make fs4412也就是编译你的板子,提示你没有这个编译规则,你就使用make fs4412_defconfig
它会提示你没有这个板子,它应该在的目录是arch/arm/configs/下,没有就直接 make exynos_defconfig
然后再来make uImage;
编译了我们就可以向内核插入模块了
先创建一个目录,取名dmodle吧,随便取,然后再进入dmoudle创建一个Makefile文件,内容如下:
PWD=$(shell pwd)
KERNEL_SRC=/home/farsight/linux-3.14-fs4412//这是内核所在的绝对路径,根据你内核所放位置输入
obj-m :=module.o//obj-m 意思是将后面跟的东东编译成内核模块。相对应还有:
//obj-y 编译进内核
//obj-n 不编译
all ://全部编译
make -C $(KERNEL_SRC) M=$(PWD) modules//编译规则编译源文件进内核
clean://终端命令模式下make clean就可以删除以下的文件
rm *.ko
rm *.o
rm module.mod.c modules.order Module.symvers
多个源文件编译生成一个内核模块
Makefile
PWD=$(shell pwd)
KERNEL_SRC=/home/farsight/linux-3.14-fs4412
obj-m :=module.o
module-objs =module.o fun.o//添加这句会将moudle.c 和fun.c一起编译
all:
make -c $(KERNEL_SRC) M=$(PWD) modules
mv *.ko /home/farsight/ko//把ko后缀的文件放入ko目录中
clean:
-rm *.ko//加-如果出错会忽略错误继续执行;
rm *.o
rm *.mod.c *.order *.symvers
内核模块的相应工具
insmod //加载指定目录下的一个.ko文件到内核,.ko是意思:k是kernel,o是obj
用法:
insmod module.ko//可以指定当前路径下的module.ko
insmod /home/module.ko//可以指定绝对路径下的module.ko
dmesg//查看控制台信息
dmesg |grep module.ko//检测内核模块module.ko的加载情况//dmesg还有很多用法
modprobe//自动加载模块到内核,相对于insmod更加智能,
//但是前提条件是模块要执行安装操作,最好再使用该命令前使用一次depmod命令
depmod//更新模块的依赖信息
用法:
depmod
modprobe module//不用指定路径和后缀;更加智能,如果B模块加载需要A模块,那么必须先存在A模块,才能加载
modinfo//查看模块的信息,在安装了模块并运行depmod命令后,可以不指定路径和后缀,
//也可以指定查看某一特定模块.ko的模块信息,示例如下
modinfo module//查看moudle模块的信息
rmmod//如果内核模块设置为允许卸载模块,那么rmmod将指定的模块从内核中卸载。示例如下
rmmod module//卸载moudle模块
dmesg
modprobe -r 模块//注意不加后缀,和rmmod用法一样,移除加载的模块
modprobe -l//查看模块列表
modprobe -c//查看模块的配置文件,如别名是什么