(实例)Linux 内核添加exfat驱动

背景:

由于exfat是常用的文件系统格式,而Linux由于版权的问题,没有在官方中添加有关的驱动。

但是 微软也同意开源了,所以比较新的 Linux 会支持这一块。

为了支持exfat的驱动,我们需要手动添加第三方的驱动支持。

这里演示2种添加exfat格式的驱动,而不将驱动编译进内核。

有关文章:《Linux 内核 编译模块》,《简单添加自己的驱动程序到Linux内核树中

驱动来源:https://github.com/arter97/exfat-linux

准备:

下载exfat驱动:

git clone https://github.com/arter97/exfat-linux.git

略:准备Linux内核源码,配置内核编译用的gcc

注:由于实际编译的时候,提示了函数重定义这个错误。所以需要注释掉冲突的代码

img

备份:为了方便演示,复制两份linux内核源码。

linux3.18_module_in : 驱动放进内核源码中进行编译

linux3.18_module_out : 驱动作为独立编译的组件。

放入linux内核源码中编译:

实际上,这一步只要在最后将驱动配置成 y 就可以编译到内核中。

根据:README.md中 “Merging the drivers to existing Linux kernel source” 这一章的内容

1)拷贝驱动源码到内核对应的位置中

cp exfat-linux ~/linux3.18_module_in/fs/exfat

2)修改exfat同级目录中的Kconfig,与Makefile

Kconfig:在 "source/fs/fat/Kconfig"之后添加此行

source "fs/exfat/Kconfig"

img

Makefile:在 "obj-$(CONFIG_FAT_FS) += fat/"之后添加此行

obj-$(CONFIG_EXFAT_FS)      += exfat/

img

3)配置并编译内核

配置:

make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig

根据实际情况,按Y(配置进内核)或者M(配置成模块),笔者这里编译成模块

img

编译:(根据内核配置的选项)

make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- modules
#make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage 编译内核

img

略:拷贝驱动到开发板中

4)加载烧录,测试。

img

一切正常。

独立编译:

根据《Linux 内核 编译模块》中参考的Makefile,参考驱动源码中的Makefile做修改

由于exfat驱动的编译不单单是一个文件,所以需要添加依赖关系。

obj-m  += exfat.o

# exfat makefile 中原有的依赖关系
exfat-objs      := super.o core.o core_exfat.o blkdev.o fatent.o cache.o 
                           nls.o misc.o extent.o xattr.o

KERNELDIR:=/home/schips/linux3.18_module_out


CROSS_COMPILE:=/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin/arm-hisiv500-linux-uclibcgnueabi-


PWD:=$(shell pwd)

default:
                $(MAKE) ARCH=arm CROSS_COMPILE=$(CROSS_COMPILE) -C $(KERNELDIR) M=$(PWD) modules

clean:
                rm -rf *.o *.order .*.cmd *.ko *.mod.c *.symvers *.tmp_versions

编译:make

同样地,生成了一份exfat.ko,正常使用即可。

注:笔者发现根据不同方式生成的ko文件大小和内容上都有小的差异。

diff exfat.ko*
Binary file exfat.ko_in and file exfat.ko_out differ

ls -al exfat.ko*
114K Dec 24 11:41 exfat.ko_in
115K Dec 24 11:41 exfat.ko_out

全文完。

如果说我的文章对你有用,只不过是我站在巨人的肩膀上再继续努力罢了。
若在页首无特别声明,本篇文章由 Schips 经过整理后发布。
博客地址:https://www.cnblogs.com/schips/
原文地址:https://www.cnblogs.com/schips/p/linux-driver-add-exfat-module-in-kernel.html