背景:

由于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. iPhone代工商,谁敢要求苹果赔偿损失?

    据外国媒体报道,苹果的首席设计师已准备离职,有相关评论称:库克已经不在把硬件设计放到第一位,整个团队都巧妙地遭遇降级.相信熟悉苹果组织的人都知道,他们一切的核心都是围绕"硬件设计" ...

  2. 李彦宏AI大会现场:3秒钟事故30分钟专注

    编辑 | 于斌 出品 | 于见(mpyujian) 很多人只看到了舞台上3秒钟的事故,却没有看到李彦宏在台上30分钟的专注. 7月3号,百度AI开发者大会上,李彦宏遭遇了3秒钟的突然袭击,他表现的沉着 ...

  3. HDU 1035 Robot Motion(dfs + 模拟)

    嗯... 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1035 这道题比较简单,但自己一直被卡,原因就是在读入mp这张字符图的时候用了scanf被卡. ...

  4. Tomcat线程池及性能优化(重点)

    只需安装Tomcat [root@localhost ~]# vim /usr/local/tomcat8/conf/server.xml 修改处如下: <Connector port=&quo ...

  5. 《程序之美系列(套装共6册)》[美]斯宾耐立思 等 (作者) epub+mobi+azw3

    <架构之美>内容包括:facebook的架构如何建立在以数据为中心的应用生态系统之上.xen的创新架构对操作系统未来的影响.kde项目的社群过程如何让软件的架构从粗略的草图成为漂亮的系统. ...

  6. Java实现大批量数据导入导出(100W以上) -(三)超过25列Excel导出

    前面一篇文章介绍大数据量导出实现: Java实现大批量数据导入导出(100W以上) -(二)导出 这篇文章在Excel列较少时,按以上实际验证能很快实现生成.但如果列较多时用StringTemplat ...

  7. JShell的使用

    JShell脚本工具是JDK9的新特性 启动JShell工具,在DOS命令行直接输入JShell命令.(如下例) 这里我们用Hello,World举例: 结果显示是正确的. 这里再举一个例子: 结果可 ...

  8. T4 多文件生成说明

    1.安装T4,自动生成文件 Manager.ttinclude <#@ assembly name="System.Core"#> <#@ assembly na ...

  9. 集成PHP应用和SOLR

    集成 PHP 应用和 Solr 搜索引擎 您的评价:          收藏该经验       你为什么需要搜索引擎?单纯数据库不够用?如果你只是创建小网站,数据库就够了.但当你创建中性或大型应用的时 ...

  10. mysql之内连接,外连接(左连接,右连接),union,union all的区别

    内连接,外连接,左连接,右连接,全连接 测试数据: CREATE TABLE `a_table` ( `a_id` int(11) DEFAULT NULL, `a_name` varchar(10) ...