(转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结
1. 学习总结
小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动。我会依次更新在学习小白的博客的过程的感悟和体会。
2.1 内核2.6.29开发环境的建立:
在看到作者小白说他用的内核是2.6.29,我就想采用跟他一样的环境来还原他的所有实验过程。因此后面就有了找内核源码、Ubuntu系统、虚拟机安装Ubuntu系统、内核版本更换(更低版本)的方法、
现在一一讲解:
因为看这一篇文章以为内核和Ubuntu系统的内核版本必须一样,就查了一下如何如何查看内核和Ubuntu的版本信息、
- sudo lsb_release -a //查看Ubuntu版本信息
- cat /etc/issue //查看Ubuntu版本信息
- uname -r //查看内核版本信息
内核和Ubuntu系统的网址以及下载方法:
- Linux内核源代码获取教程
- 欢迎访问网易开源镜像站 ubuntu-releases为unbuntu系统的 kernel是内核的
- Ubuntu更换内核方法
- 给ubuntu换内核
- ubuntu14.04手动更换内核方法
- Ubuntu更换Linux内核版本
后来发现在不同版本的Ubuntu系统上也可以运行2.6.29的内核。
目前我试验的Ubuntu系统的版本为10.04-LTS,它的内核版本为:2.6.32
而我试验的内核与小白博主的内核一样都为2.6.29
2.2 重点内容的总结和感悟:
本文主要包括三个部分:
- 内核代码树(这个在很多内核的书中都有讲述)
- 通过增加一个目录的方式来介绍内核目录生成过程
- 模块、内核的编译命令
内核读取数据、图形界面选择,生成内核的原理如下:
- 一般我们会从/arch/arm/config目录下的拷贝一个默认配置的Kconfig文件到内核跟目录下并改名为config
- 由总Makefile决定编译的体系结构(ARCH). 编译工具(CROSS_COMPILE),并知道需要进去哪些内核根下的哪些目录进行编译。
- 由arch/$(ARCH)/Makefile,决定arch/$(ARCH)下还有 的哪些目录和文件需要编译。
- 知道了需要编译的目录后,递归的进入哪些目录下,读取每一个Kconfig的信息,生成了图形配置的界面。
- 通过我们在图形配置界面中选项为[*]、[M]或者[]。
- 保存并退出配置,会根据配置生成一份新的配置文件.config,并在同时生成include/config/auto.conf(这是.config的去注释版)。文件里面保存着CONFIG_XXXX等变量应该取y还是取m。
- 、根据Makefile包含的目录和配置文件的要求,进去个子目录进行编译,最后会在各子目录下 生成一个.o或者.a文件,然后总Makefile指定的连接脚本 arch/$(ARCH)/kernel/vmlinux.lds生成vmlinux,并通过 压缩编程bzImage,或者按要求在对应的子目录下编译成 模块。
2.3 错误以及理解不到位的地方:
- 楼主有个错误点吧-y表示编译进内核吧-m表示编译到模块
- 楼主在arch/arm/Kconfig中添加:source "drivers/test/Kconfig"并不会出现想要的目录。而如果在test1的上层目录(driver)下的Kconfig中加入source "drivers/test/Kconfig"就会出现想要的目录。