首页 > 技术文章 > (转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结

agui125 2018-12-11 20:35 原文

1. 学习总结

小白的博客讲的linux内核驱动这一块的东西比较基础,因此想通过学习他的博客,搭配着看书的方式来学习linux内核和驱动。我会依次更新在学习小白的博客的过程的感悟和体会。

2.1 内核2.6.29开发环境的建立:

在看到作者小白说他用的内核是2.6.29,我就想采用跟他一样的环境来还原他的所有实验过程。因此后面就有了找内核源码、Ubuntu系统、虚拟机安装Ubuntu系统、内核版本更换(更低版本)的方法、

现在一一讲解:

搭建基于ubuntu的内核开发环境

因为看这一篇文章以为内核和Ubuntu系统的内核版本必须一样,就查了一下如何如何查看内核和Ubuntu的版本信息、

  • sudo lsb_release -a //查看Ubuntu版本信息
  • cat /etc/issue //查看Ubuntu版本信息
  • uname -r //查看内核版本信息

内核和Ubuntu系统的网址以及下载方法:

后来发现在不同版本的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"就会出现想要的目录。

在Linux内核中添加自己的驱动程序

2. 参考帖子

原创链接:linux设备驱动归纳总结(一):内核的相关基础概念

推荐阅读