背景:

由于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

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

备份:为了方便演示,复制两份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

全文完。

(实例)Linux 内核添加exfat驱动的更多相关文章

  1. 【转】 linux内核移植和驱动添加(三)

    原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...

  2. linux内核SPI总线驱动分析(一)(转)

    linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析            (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...

  3. Linux内核调用I2C驱动_驱动嵌套驱动方法

    禁止转载!!!! Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于 ...

  4. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  5. 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  6. linux内核添加模块

    参考: http://blog.csdn.net/gaoguoxin2/article/details/50220665 动态添加模块不需要编译内核. LINUX的模块主要由6部分组成: 1.模块的加 ...

  7. 操作系统项目:向Linux内核添加一个系统调用

    内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...

  8. linux内核SPI总线驱动分析(二)(转)

    简而言之,SPI驱动的编写分为: 1.spi_device就构建并注册  在板文件中添加spi_board_info,并在板文件的init函数中调用spi_register_board_info(s3 ...

  9. 为Android内核添加新驱动

    转载地址:http://blog.chinaunix.net/uid-16759545-id-4892379.html 1. 在drives目录下添加hello目录,内含hello.c Kconfig ...

随机推荐

  1. VUE项目开发中使用WebSocket

    初始化WebSocket initWebSocket(){ //初始化weosocket const wsuri = 'ws://10.100.45.8:8888/websocket';//ws地址 ...

  2. 【CSS 】js操作css

    对设置和移除所有 <p> 元素的 "main" 类进行切换: $("button").click(function(){ $("p&quo ...

  3. 【PAT甲级】1048 Find Coins (25 分)(二分)

    题意: 输入两个正整数N和M(N<=10000,M<=1000),然后输入N个正整数(<=500),输出两个数字和恰好等于M的两个数(小的数字尽可能小且输出在前),如果没有输出&qu ...

  4. iOS APP语言国际化之应用内切换语言环境

    最近接了一个项目,需求是要做一款应用的英文版本,客户并不清楚,以为要另做一个APP.沟通后告诉他们在之前应用基础上加个国际化功能就好,把之前的语言国际化重新梳理记录一下. 一般设置更改本地语言环境后, ...

  5. Chrome浏览器 无需安装插件将整个网页另存为图片

    步骤1 ctrl+shift+i 步骤2 ctrl+shift+p 步骤3 输入full 回车确定 感谢先辈们的无私奉献!原文https://blog.csdn.net/wumingid/articl ...

  6. Jquery+ajax模板

    $.ajax({     url:'',     type:'POST', //GET     async:true,    //或false,是否异步     data:{         name ...

  7. python pandas模块简单使用(读取excel为例)

    第一步:模块安装 pip install pandas 第二步:使用(单个工作表为例) 说明:如果有多个工作表,那么只要指定sheetname=索引,(第一个工作表为0,第二个工作表为1,以此类推) ...

  8. 关于ubuntu挂载ntfs无法进行读写的解决方法

    查看挂载信息 df -h 参看要挂载磁盘UUID sudo blkid 编辑/etc/fstab文件: sudo vim /etc/fstab 在最后一行添加如下一行信息: UUID=A248CF46 ...

  9. 吴裕雄--天生自然 JAVA开发学习:解决java.sql.SQLException: The server time zone value报错

    这个异常是时区的错误,因此只你需要设置为你当前系统时区即可,解决方案如下: import java.sql.Connection ; import java.sql.DriverManager ; i ...

  10. AT2827 最长上升子序列LIS(nlogn的DP优化)

      题意翻译 给定一长度为n的数列,请在不改变原数列顺序的前提下,从中随机的取出一定数量的整数,并使这些整数构成单调上升序列. 输出这类单调上升序列的最大长度. 数据范围:1<=n<=10 ...