(實例)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

全文完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM