Linux驱动开发之路(准备)内核和根⽂件系统超详细笔记
⽬录
本系列⽂章由江⼭(csdn名:补不补布)(github:jianggogogo)⾃⼰写成,当中⽤到引⽤时都已经标记出来,如果出现版权问题,请直接联系我修改。当然,技术在于分享,欢迎⼤家转载,不过请注明出处。最后,如果出现有错误的地⽅欢迎⼤家指正。
前⾔:
在学习韦东⼭教程时,直接从裸板开发直接跳到了驱动开发的课程当中,发现中间缺少了很⼤⼀部分。现在重新学习了课后的知识之后,来重新写这样⼀篇笔记。
⼀、⽬的
笔记,记录
1. linux内核打补丁,编译
2. 创建⼀个根⽂件系统。
3. nfs⽹络⽂件系统创建。
⼆、Linux内核打补丁,编译:
2.1、下载⼀个内核和补丁⽂件:
这三个是对应的内核和补丁的安装包。
2.2、解压缩内核⽂件
流程为:
1、解压缩内核⽂件。
2.3、打补丁
2、打补丁,命令如下:
patch <p1 < ../linux-2.6.22.6_jz2440.patch
2.4、⽣成配置⽬录
注意,由于linux可以适⽤于不同的开发板,那么对于不同的开发板⾃然要使⽤不同的配置,这⾥使⽤的是s3c2440那么⾃然也需要到
s3c2440的配置模式,当然,这些⽂件已经在linux⾥⾯集成了,我们只需要出来然后编译就可以实现。
这个⽂件名为:>s3c2440_deconfig
⽂件⽬录为:>arch/arm/configs
在linux⽬录下编译板⼦的配置⽂件
make s3c2440_deconfig
这⼀步会⽣成⼀个⽂件:config_ok。
然后我们将这个⽣成的配置⽂件,设置为系统需要的配置⽂件:
刘昕个人资料cp config_ok .config
然后,⽣成⽬录和打开⽬录,命令如下:
如何进入路由器//这⼀步⽤来打开配置菜单
make menuconfig
菜单如下:
2.4、编译和下载内核映像⽂件
注意,我们的Linux内核⽂件下载下来能够直接⽤于开发板上⾯吗?答案当然是否定的,毕竟这只是⼀个内核⽂件,开发板却是很多的。我们需要使⽤相同的规则来编译内核,让所有的的开发板都能识别这⼀个规则,从⽽实现在开发板上⾯运⾏linux。
这个按照固定规则⽣成的⽂件叫做:uImage。
在内核⽬录:
执⾏:
make uImage
这时候会⽣成⼀个⽂件,uImage。这时候,我们在uboot中选择下载uimage就可以将linux 内核映像⽂件烧⼊了,如下⾯所⽰哦,选择k
任斯璐2.5、结果
经过,上⾯的操作,那么我们的开发板就可以说拥有了⾃⼰的linux系统⽂件。
朴春 权志龙接吻三、根⽂件系统创建:
我也⼀直想不同这东西到底是个啥。可是后来⾃⼰的⼀想,原始⼈估计也没有办法给⾐服下⼀个定义,只不过是突然觉得冷了,就拿了⼀些东西该盖在⾃⼰的⾝上。
所以,初学linux的⼈来说,我们也⽆法给根⽂件系统下⼀个或者说看别⼈的解释就明⽩这是啥。我们只有⾃⼰去⽤,去犯错误。才能体会,当初设计者为啥要给出这样⼀个东西。
3.1、为啥需要根⽂件系统。
我是这样想的,Linux⼀启动,总该知道内核外⾯究竟是有点啥东西吧。但是问题来了,就像古代的朱元璋⼀登基,总得问问丞相同志,我这个皇帝有多少⼟地啊,多少⾂民啊,多少妃⼦啊(当然,这个他⾃⼰知道)。不知道这些,皇帝就没有办法开展⼯作啊。
所以,就像上⾯⼀样,linux⼀加载,也该知道⾃⼰现在运⾏的环境有点啥东西。所以,linux内核第⼀个加载的记录⽂件的东西就叫做根⽂件系统。
3.2、最⼩的根⽂件系统:
萧亚轩整容对比当然,⽹上有很多做好的根⽂件系统,但是这些做好的各有各的功能,从基础做⼀个简单的也能提⾼⾃⼰的能⼒。
3.2.1、busybox
第⼀步,我们的根⽂件系统,起码得⽀持我们的命令吧。如果,ls这种基础命令都不⽀持,那么太难了。
busybox就是集成命令得⼀个库。
⾸先这是⽂件⽬录得配置⽂件。
配置⽂件⼀般都放在,/etc⽬录下⾯。这⾥的busybox规定了名称,那么我们就使⽤这两个名称的⽂件作为配置⽂件。
inittab
rcS
我们通过研究,可以得出怎么写配置⽂件:
这些是必须的内容:
3.2.1、busybox编译:
解压
在busybox的⽬录下⾯有⼀个readme⽂件可以观看,得到busybox的使⽤如下:
1、make menuconfig
2、设置交叉编译⼯具链:
仙洋为什么判7年vi Makefile
将CROSS_COMPILE = arm-linux-
3、打开代码补全:
4、编译:
make
5、安装
注意,我们现在是在pc机器上⾯编写arm机器的linux程序。所以,不能直接安usybox不然会直接,覆盖原来系统⾥⾯的busybox,导致错误。
我们要把busybox安装到,要下载到arn上⾯的板⼦的⽂件夹中:
make CONFIG_PREFIX=/work/nfs_root/first_fs install