linux内核
linux内核开发听起来就很高大上,给人的感觉也很难上手,实际上只要找对了资源,是一件很简单那的事情。这篇博文将大致的让读者了解到linux内核开发的几个基础步骤
需要准备的资源
linux内核源码
这里是下载地址
第一步、点击进入linux
第二步、在树莓派上通过uname -r查看内核的版本,并且根据版本选择不同的源码、作者这里是4.14所以下载了4.14的内核源码
第三步、放到pc机的linux系统里面并且使用tar或者unzip进行解压
这样我们就得到了一个linux内核源码。
交叉编译工具
具体操作方法参考这篇博文
博文链接
配置linux内核
一般的内核开发就是 配置内核,也就是操作./config文件。
这个文件会知道Makefile将配置了的部分组织成内核。
第一种方式
使用内核源码自带的./config文件
在内核源码文件夹下运行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfigll
此命令功能是获取bcm2709_defconfig的配置到 .config里。
第二种方法
获取现在正在使用的内核的./config文件
在树莓派上
sudo modprobe configs
将下面的文件复制到pc机上,解压为./config文件,这个就是正在使用的内核的./config文件
/proc/config.gz
第三种方法
自己配置(裁剪)内核,一般是基于厂家的./config
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
运行之后就会见到一个如下的页面
这里面的
[ ] 表示不加入到内核里面
[*] 表示将驱动编译到内核里面,zImage文件包含驱动
[M] 表示将驱动编译为一个模块,需要用到的时候在去安装开启
sudo insmod ***.ko//这个就是安装驱动模块的指令
以上基本就是内核配置的内容了。
编译内核
一、安装必要的库:
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g
sudo apt-get install libc6
二、编译内核
在源码目录下运行这一行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4:指定4个线程进行编译
zImage:指定镜像文件名
modules:生成驱动模块
dtbs:生成配置文件
三、挂载sd卡
把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。
我们生成的文件涉及到这两个分区的内容,一般插入ubuntu后会自动挂载,fat分区可以不用root权限操作,ext4分区需要root权限操作。
两个分区具体挂载在什么地方可以自己决定,以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载的路径。
1、安装modules
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install
操作ext4分区,需要root权限。
2、更新 kernel.img 文件
前面已经用 mkknlimg 工具打包了kernel_new.img文件了,把它复制到boot分区并配置使用即可:
cp kernel_new.img [fat]/
编辑 [fat]/config.txt 文件,在最后加入一行:
kernel=kernel_new.img
3、复制其他相关文件
cp arch/arm/boot/dts/.dtb [fat]/
cp arch/arm/boot/dts/overlays/.dtb* [fat]/overlays/
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
更新完成后插回树莓派即可开机,开机后可以用 uname -a 命令查看kernel信息已经改变。
更加详细的内容可以去查看这位大神的博文,我的这篇博文只是总结,方便自己使用
博文地址