(实例)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 ...
随机推荐
- 电子书及阅读器Demo
电子书阅读器(Kindle,电子纸技术.LCD.电子墨水技术等: 亚马逊/当当网站) 电子书产业可分5大环节:内容供应商.数字格式制作商.内容流通服务平台.传输平台以及终端阅读器产品. 全球电子书市 ...
- Python下opencv使用笔记(十一)(详解hough变换检测直线与圆)
http://blog.csdn.net/on2way/article/details/47028969 http://blog.csdn.net/mokeding/article/details/1 ...
- FastStone Capture 截图工具
主要功能介绍 截屏 包括了全屏截取,当前活动窗口截取,截取选定区域,多边形截取和截取滚动页面等,基本上常用的都有了.特别是滚动截取,许多朋友为了这个功能,不惜安装各种重量级的截屏软件,甚至四处下载各种 ...
- 「JLOI2012」树
「JLOI2012」树 传送门 不得不说这题的数据是真的水... 我们可以想到很明确的一条思路:枚举每一个点向根节点跳,知道路径和不小于 \(s\),恰好等于 \(s\) 就直接加答案. 跳的过程可以 ...
- Java 笔试题
有一些还是存在问题,欢迎大家一起探讨. 在Java类中,使用以下( )声明语句来定义公有的int型常量MAX. A. public int MAX = 100; B. final int MAX = ...
- ImageMagick PDF到JPG有时会导致黑色背景
convert -verbose -density 300 -quality 50 -background white -alpha remove 0.pdf 0.jpg magick convert ...
- jvm学习:类的加载、连接、初始化、常量
类在jvm中有这几个过程类的加载.连接.初始化.使用.卸载 类的加载 类的加载是将class文件中的二进制数据加载到内存中,将其放在运行时的数据区:方法区内,然后在内存中创建一个 java.lang. ...
- 「Luogu P1383 高级打字机」
一道非常基础的可持久化数据结构题. 前置芝士 可持久化线段树:实现的方法主要是主席树. 具体做法 这个基本就是一个模板题了,记录一下每一个版本的字符串的长度,在修改的时候就只要在上一个版本后面加上一个 ...
- CSP2019 括号树
Description: 给定括号树,每个节点都是 ( 或 ) ,定义节点的权值为根到该节点的简单路径所构成的括号序列中不同合法子串的个数(子串需要连续,子串所在的位置不同即为不同.)与节点编号的乘积 ...
- 刷题56. Merge Intervals
一.题目说明 题目是56. Merge Intervals,给定一列区间的集合,归并重叠区域. 二.我的做法 这个题目不难,先对intervals排序,然后取下一个集合,如果cur[0]>res ...