(实例)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
注:由于实际编译的时候,提示了函数重定义这个错误。所以需要注释掉冲突的代码
备份:为了方便演示,复制两份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驱动的更多相关文章
- 【转】 linux内核移植和驱动添加(三)
原文网址:http://blog.chinaunix.net/uid-29589379-id-4708909.html 原文地址:linux内核移植和驱动添加(三) 作者:genehang 四,LED ...
- linux内核SPI总线驱动分析(一)(转)
linux内核SPI总线驱动分析(一)(转) 下面有两个大的模块: 一个是SPI总线驱动的分析 (研究了具体实现的过程) 另一个是SPI总线驱动的编写(不用研究具体的实现过程) ...
- Linux内核调用I2C驱动_驱动嵌套驱动方法
禁止转载!!!! Linux内核调用I2C驱动_以MPU6050为例 0. 导语 最近一段时间都在恶补数据结构和C++,加上导师的事情比较多,Linux内核驱动的学习进程总是被阻碍.不过,十一假期终于 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九-2)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- 基于tiny4412的Linux内核移植 -- MMA7660驱动移植(九)
作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...
- linux内核添加模块
参考: http://blog.csdn.net/gaoguoxin2/article/details/50220665 动态添加模块不需要编译内核. LINUX的模块主要由6部分组成: 1.模块的加 ...
- 操作系统项目:向Linux内核添加一个系统调用
内容: 向Linux增加一个系统调用 撰写一个应用测试程序调用该系统调用 使用ptrace或类似的工具对该测试程序进行跟踪调 环境: 1.vmware workstation 15.0.0 2.ubu ...
- linux内核SPI总线驱动分析(二)(转)
简而言之,SPI驱动的编写分为: 1.spi_device就构建并注册 在板文件中添加spi_board_info,并在板文件的init函数中调用spi_register_board_info(s3 ...
- 为Android内核添加新驱动
转载地址:http://blog.chinaunix.net/uid-16759545-id-4892379.html 1. 在drives目录下添加hello目录,内含hello.c Kconfig ...
随机推荐
- 短信通道——阿里大鱼(java)
综述 注:本文写于2017年6月22日升级之后. 使用阿里大鱼发送短信已经成为一种趋势,因为权威,而且价格也比较适中,被越来越多的公司所采用.在介绍阿里大鱼发送短信之前,首先得拥 ...
- Docker 之registry私有仓库搭建
Docker 之registry私有仓库搭建 官方提供的私有仓库docker registry用法 https://yeasy.gitbooks.io/docker_practice/reposito ...
- SpringBoot常用注解解析
@RestController 将返回的对象数据直接以 JSON 或 XML 形式写入 HTTP 响应(Response)中.绝大部分情况下都是直接以 JSON 形式返回给客户端,很少的情况下才会以 ...
- Java中的基本数据类型语法补充
变量要先赋值后使用 不给变量赋值代表什么 不赋值就使用会怎样 (会报错) 计算并赋值运算符 作用是为了让代码更加简洁.比如 a = a + 10,可以简化为 a+=10 += -= *= /= %= ...
- 为小学生出四则运算题目.java
import java.util.Scanner; import java.util.Random; public class test{ public static int s1 = new Ran ...
- 【PAT甲级】1029 Median (25 分)
题意: 输入一个正整数N(<=2e5),接着输入N个非递减序的长整数. 输入一个正整数N(<=2e5),接着输入N个非递减序的长整数.(重复一次) 输出两组数合并后的中位数.(200ms, ...
- 【PAT甲级】1020 Tree Traversals (25 分)(树知二求一)
题意: 输入一个正整数N(N<=30),给出一棵二叉树的后序遍历和中序遍历,输出它的层次遍历. trick: 当30个点构成一条单链时,如代码开头处的数据,大约1e9左右的结点编号大小,故采用结 ...
- macOS 10.14+ 安装LTP
LTP是哈尔滨工业大学(HIT,窝工)出品的一个自然语言处理工具包.其功能包括中文分词(“分词效果好于jieba分词”[引用自学长]).词性标注.实体识别等. 对于macOS来说,现有的版本可能不多, ...
- redhat 7.6 apache 服务简单安装-01
rpm -qa | grep httpd //该命令查看apache是否安装,下面图片是已安装,未安装不会显示任何内容 yum install httpd -y ...
- ubuntu 14 双击会自动删除文本
可能是ibus输入法引起,解决方法: Step1打开ibus首选项 $ibus-setup Step2 取消"Embed preedit text in application window ...