一.为什么要进行树莓派源码的配置呢?
因为如果我们要从事驱动代码的编写的话肯定要对编写的代码进行编译,如果要对驱动代码进行编译的话就必须要一个提前编译好的内核,因此编译内核就必须配置。
配置的最终目标生成一个.config文件,改文件指导Makefile去把有用的东西组织成内核。
配置方式:
1,厂家配置Linux内核源码
2,make menuconfig 一项项配置,通常是基于厂家的config配置
3,cp 厂家.config .config
二、如何配置树莓派Linux内核?
第一种方式:(推荐使用)
1.厂家配linux内核源码,比如说买了树莓派,树莓派linux内核源码
cp 厂家.config .config (树莓派1的工程是bcmrpi_defconfig,树莓派2、3的工程是bcm2709_defconfig)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派内核 主要核心指令
ARCH=arm:指定为RAM架构
CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器
KERNEL=kernel7:指定内核版本
配置成功:
第二种:
make menuconfig 一项项配置,通常是基于厂家的config来配置 (需要安装ncurse库,下面有介绍)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
#指定ARM架构 指定编译器 树莓派内核 主要核心指令
ARCH=arm:指定为RAM架构
CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器
KERNEL=kernel7:指定内核版本
安装相关库文件:
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
- 上下左右键进行操作
- Enter进入下一个子菜单(末尾带箭头的会有子菜单)
- " M " 模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
- " * " 编译进内核 zImage包含了
开始编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
- ARCH=arm:指定为RAM架构
- CROSS_COMPILE=arm-linux-gnueabihf- :指定编译器
- KERNEL=kernel7:指定内核版本
- -j4:四核处理器来编译(可根据虚拟机的硬件来更改)
- zImage:生成内核镜像 modules:生成的驱动模块
- dtbs:生成配置文件
我电脑编译了24分钟。
表示编译成功了。失败则无此文件。zImage为目标文件
成功后打包zImage
成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
表示打包成功。
dmesg
:表示查看内核信息
把sdb1和sdb2挂到我们的Ubuntu这边来
把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。
1.创建两个文件夹
data1–>fat分区–>放置镜像文件
data2–>ext4分区–>放置根目录文件
2.挂载sdb1和sdb2 到 data1 data2
sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2
此时data1和data2就有数据了(data1:(fat分区) 放置内核镜像 data2(ext4分区):存放存放根目录)
3、安装modules(设备驱动文件: hdmi usb wifi io …)
modules安装在ext4分区也就是我们的data2分区
安装modules的路径是我们源码的路径
在树莓派的知识包路径下运行这个指令。
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/mr_qin/system/data2 modules_install
4、安装更新 kernel7.img
4.1.避免刷机失败我们把kernel7.img备份一下
4.2.复制编译好的kernel_new.img到挂载的u盘里面。
.mr_qin@season:~/system/linux-rpi-4.14.y$ cp kernel_new.img ../data1/kernel7.img
4.3.我们可以看一下相关信息:
用du xxx -h
可以查看文件大小
再用md5sum
可以查看一个文件的值,这个值是唯一的,通过查看拷贝过程中的两个文件的值就可以知道是否拷贝错误。
拷贝成功。
4.4.拷贝配置文件
cp arch/arm/boot/dts/.*dtb* /home/mr_qin/system/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/mr_qin/system/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/chenlc/data1/overlays/
这下我们的准备工作就做好了。
5.断开SD开的连接 把SD开的连接接到电脑上
6.修改codline.txt文件
dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
7.修改config.tex文件
dtoverlay=pi3-miniuart-bt
最后接上串口钱然后上电,成功!查看我们的树莓派版本号,与之前的哦不一样了,说明我们内核编译成功了!