热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux编译3g驱动_Linux内核读书笔记(二)从内核出发

本章主要介绍获取内核代码的途径,编译内核的步骤以及内核代码架构的简要说明。获取内核源码linux内核官网https:www.kernel.org如下图所示࿰

本章主要介绍获取内核代码的途径,编译内核的步骤以及内核代码架构的简要说明。

获取内核源码


linux内核官网

https://www.kernel.org/

如下图所示,内核版本以及更新到5.9.11,由于我都本机linux内核版本为5.4.0,为了方便编译,这里都以该版本为例。

ea7b68f6a543d12e0bf6e8445f9d0fec.png

git 仓库

git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

或下载压缩包

wget https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/linux-5.4.tar.xz

国内镜像

由于网络的原因直接从官网下载代码会非常慢(实测4kbps),所以推荐使用国内镜像。国内的镜像有很多,本文使用五道口职业技术学校的镜像(https://mirrors.tuna.tsinghua.edu.cn/)

git仓库

git clone https://mirrors.tuna.tsinghua.edu.cn/git/linux.git

或下载压缩包

wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.4.tar.xz

这下载速度超赞

bcb2798deb317c487c174be675df1f9f.png

解压

tar -Jxvf linux-5.4.tar.xz

内核编译对源码存放的位置没有要求,这里放在home目录下自建的~/linux文件,解压后的目录,

c18c4c578141df1a95f56ba61c14f316.png

内核代码大概有900+M,56000+个文件,26000000+行代码。

内核源码树

目录简介如下:

目录内容
arch/

包含各体系结构特定的代码,如arm、x86、ia64、mips等,在每个体系结构目录下通常都有:

-boot 内核需要的特定平台代码

-kernel 体系结构特有的代码

-lib 通用函数在特定体系结构的实现

-math-emu 模拟FPU的代码,在ARM中,使用mach-xxx代替

-mm 特定体系结构的内存管理实现

-include 特定体系的头文件

block/存放块设备相关代码
crypto/存放加密、压缩、CRC校验等算法相关代码
Documentation/存放相关说明文档,很多实用文档,包括驱动编写等
drivers/存放Linux内核设备驱动程序源码。驱动源码在Linux内核源码中占了很大比例,常见外设几乎都有可参考源码,对驱动开发而言,该目录非常重要。该目录包含众多驱动,目录按照设备类别进行分类,如char、block、input、i2c、spi、pci、usb等
firmware/存放处理器相关的一些特殊固件
fs/存放所有文件系统代码,如fat、ext2、ext3、ext4、ubifs、nfs、sysfs等
include/存放内核所需、与平台无关的头文件,与平台相关的头文件已经被移动到arch平台的include目录,如ARM的头文件目录
init/包含内核初始化代码
ipc/存放进程间通信代码
kernel/包含Linux内核管理代码
lib/库文件代码实现
mm/存放内存管理代码
net/存放网络相关代码
samples/存放提供的一些内核编程范例,如kfifo;后者相关用户态编程范例,如hidraw
srcipts/存放一些脚本文件,如menuconfig脚本
security/存放系统安全性相关代码
sound存放声音、声卡相关驱动
tools/编译过程中一些主机必要工具

usr

cpio相关实现
virt/内核虚拟机KVM

内核编译

配置选项

linux内核采用模块化设计,可以有选择的配置哪些功能模块或驱动被编译到内核,所以在编译内核前首先要进行内核配置。系统提供了多种配置方式,在源码根目录下输入命令启动:

make config

这是最原始的配置方式,通过字符串页面对功能逐一配置,费时费力。

make menuconfig或make gconfig

这两种都是通过图形页面进行配置,效率明显提高。下图为menuconfig页面

f8dd23f7916247b3e8eb1569390adb1a.png

执行完之后会在根目录下生成.config文件,表示配置成功。

验证更新配置

make oldconfig

编译

make

大功告成。

交作业交作业




推荐阅读
author-avatar
夜笙_ciel
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有