(转载)小白的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"就会出现想要的目录。
2. 参考帖子
原创链接:linux设备驱动归纳总结(一):内核的相关基础概念
(转载)小白的linux设备驱动归纳总结(一):内核的相关基础概念---学习总结的更多相关文章
- linux设备驱动归纳总结(四):5.多处理器下的竞态和并发【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-67673.html linux设备驱动归纳总结(四):5.多处理器下的竞态和并发 xxxxxxxxxx ...
- linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-119723.html linux设备驱动归纳总结(十三):1.触摸屏与ADC时钟 xxxxxxxxxx ...
- linux设备驱动归纳总结(十二):简单的数码相框【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-116926.html linux设备驱动归纳总结(十二):简单的数码相框 xxxxxxxxxxxxxx ...
- linux设备驱动归纳总结(十一):写个简单的看门狗驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-112879.html linux设备驱动归纳总结(十一):写个简单的看门狗驱动 xxxxxxxxxxx ...
- linux设备驱动归纳总结(十):1.udev&misc【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-111839.html linux设备驱动归纳总结(十):1.udev&misc xxxxxxx ...
- linux设备驱动归纳总结(九):1.platform总线的设备和驱动【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-111745.html linux设备驱动归纳总结(九):1.platform总线的设备和驱动 xxxx ...
- linux设备驱动归纳总结(八):4.总线热插拔【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110774.html linux设备驱动归纳总结(八):4.总线热插拔 xxxxxxxxxxxxxxx ...
- linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110738.html linux设备驱动归纳总结(八):3.设备管理的分层与面向对象思想 xxxxxx ...
- linux设备驱动归纳总结(八):2.总线、设备和驱动的关系【转】
本文转载自:http://blog.chinaunix.net/uid-25014876-id-110295.html linux设备驱动归纳总结(八):2.总线.设备和驱动的关系 xxxxxxxxx ...
随机推荐
- Cas(01)——简介
Cas的全称是Centeral Authentication Service,是对单点登录SSO(Single Sign On)的一种实现.其由Cas Server和Cas Client两部分组成,C ...
- Python扫描器-常用库-Request
1.常用库-Request 1.1. 介绍 #安装:pip3 install requests #各种请求方式:常用的就是requests.get()和requests.post() >> ...
- self-attention详解
编写你自己的 Keras 层 对于简单.无状态的自定义操作,你也许可以通过 layers.core.Lambda 层来实现.但是对于那些包含了可训练权重的自定义层,你应该自己实现这种层. 这是一个 K ...
- linux下的进程间通信概述
管道(PIPE) FIFO(有名管道) XSI消息队列 XSI信号量 XSI共享内存 POSIX信号量 域套接字(Domain Socket) 信号(Signal) 互斥量(Mutex) 其中信号(s ...
- git 创建标签推送远程分支
目录 git 创建标签推送远程分支 查看tag 创建tag 推送标签到远程仓库 删除tag git 创建标签推送远程分支 标签概念: tag, 对于迭代频繁的项目. 每一个标签可以理解为一个版本. 创 ...
- 【POJ - 3268 】Silver Cow Party (最短路 Dijkstra算法)
Silver Cow Party Descriptions 给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x, ...
- leetcode1105 Filling Bookcase Shelves
思路: dp[i]表示摆放好前i本书所需要的最小代价. 实现: class Solution { public: int minHeightShelves(vector<vector<in ...
- Yarn 资源调度器
1. 概述 YARN 是一个资源调度平台,负责为运算程序提供服务器运算资源: YARN 由ResourceManager,NodeManager, ApplicationMaster 和 Contai ...
- centos7配置hadoop
hadoop压缩包下载: 链接:https://pan.baidu.com/s/1dz0Hh75VNKEebcYcbN-4Hw 提取码:g2e3 java压缩包下载: 链接:https://pan.b ...
- Redis部分