exfat linux 驱动_(实例)Linux 内核添加exfat驱动
背景:
由于exfat是常用的文件系統格式,而Linux由于版權的問題,沒有在官方中添加有關的驅動。
但是 微軟也同意開源了,所以比較新的 Linux 會支持這一塊。
為了支持exfat的驅動,我們需要手動添加第三方的驅動支持。
這里演示2種添加exfat格式的驅動,而不將驅動編譯進內核。
準備:
下載exfat驅動:
git clone https://github.com/arter97/exfat-linux.git
略:準備Linux內核源碼,配置內核編譯用的gcc
注:由于實際編譯的時候,提示了函數重定義這個錯誤。所以需要注釋掉沖突的代碼
備份:為了方便演示,復制兩份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"
Makefile:在 "obj-$(CONFIG_FAT_FS) += fat/"之后添加此行
obj-$(CONFIG_EXFAT_FS) += exfat/
3)配置并編譯內核
配置:
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
根據實際情況,按Y(配置進內核)或者M(配置成模塊),筆者這里編譯成模塊
編譯:(根據內核配置的選項)
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- modules
#make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage 編譯內核
略:拷貝驅動到開發板中
4)加載燒錄,測試。
一切正常。
獨立編譯:
根據《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
全文完。
總結
以上是生活随笔為你收集整理的exfat linux 驱动_(实例)Linux 内核添加exfat驱动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kotlin sealed 中_Kotl
- 下一篇: 唐尼vr眼镜好吗_科普:眼镜片有哪些种类