前言:来到这里,我们正式学习linux
的内核的配置和编译。
一、首先我们先来了解一下树莓派等芯片带操作系统的启动过程
1.1 X86、Intel、windows
等设备的启动过程
启动过程:电源- > BIOS
-> windows
内核 -> C,D
盘的启动 -> 程序的启动(例如QQ
的启动)
1.2 嵌入式产品(树莓派、mini2440、mini6410、nanopi、海思、RK(瑞芯微) )的启动过程
启动过程:电源 -> BootLoader
(引导操作系统启动) -> linux
内核 -> 文件系统(根据功能性来组织文件夹,带访问权限)-> 实实在在的嵌入式产品的启动(例如KTV
点歌机)
1.3 安卓操作系统的启动过程
启动过程:电源 -> fastBoot/Bootloader/
-> linux
内核 -> 文件系统 -> 虚拟机 -> HOME
应用程序 -> 点击某图标打开某app
1.4 C51
、STM32
(裸机,不带操作系统)的开发流程
不带操作系统的裸机开发是C语言直接操控底层寄存器实现相关业务。
业务流程型的裸机代码:
例如:遥控灯:while
(1)
垃圾桶:WemosD1 LOOP
(函数)
恩智浦智能车:stm32
以上内容虽然是偏向概念,但是在面试的时候也可以跟别人聊,可以增加你对嵌入式设备的了解
二、树莓派linux源码目录树的分析
linux内核源代码目录树结构详解
2.1 首先我们先来聊一下linux
内核
linux
内核大约由1.3w个C文件组成,1100w行代码左右
linux
是开源的,免费的,linux
开源社区由其工作者和爱好者共同进行维护
linux
是一个开源的,支持多架构多平台代码(可以说是非常的牛逼的)
可以执行是非常高的
但是linux
内核编译出来一般就是几M,一般是4M左右
因为是支持多平台多架构,所以在编译之前是需要进行配置的,配置成适合的目标平台来用
例如:ARM架构
海思,友善之臂,RK,树莓派,nanopi
X86架构
PowerPC
MIPS
三、树莓派linux源码的配置
首先我们先来了解一个问题:为什么要对linux内核进行配置呢?
答案:我们都知道驱动代码编写完后, 驱动代码的编译需要一个提前编译好的内核,那么进行内核的编译就必须要进行配置,配置的最终目标会生成.config
文件,该文件指导Makefile
去把有用的东西组织成内核。
3.0 交叉编译工具链的安装
由于我之前已经安装了交叉编译工具链所以省去了这一个步骤,如果没安装的参考前面交叉编译工具链的获得的博文
3.0.1 树莓派linux内核源码的下载
树莓派linux内核源码的下载网址
然后在下图黄色框内选择对应的版本下载,我的树莓派的版本是4.14.98-v7+
,所以我选择的下载版本是4.14.y
,最好下载到windows跟linux的共享文件夹里,这样在虚拟机里直接从共享文件夹里拷贝出来即可,然后cp /mnt/hgfs/sharefromwindows/linux-rpi-4.14.y /home/lhb/SYSTEM
,然后将其解压
配置内核源码的三种方式
一般我们购买了芯片,厂家都会配linux
内核源码,比如说我们买了树莓派,厂家就会向我们提供树莓派linux
内核源码
配置config(以下的所有操作都是用到方式一这种cp厂家的config)
linux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig
;
树莓派2跟3的工程是bcm2709_defconfig
;
3.1 方式一
使用厂家提供的config
进行配置(即 cp 厂家.config .config
)
查找厂家的config
指令:find -name *_defconfig
然后在终端执行以下指令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
这个命令的作用就是获取bcm2709_defconfig
的配置到config
中来
除了以上的方式,我们也可以用最传统的方式:cp arch/arm/configs/bcm2709_defconfig .config
然