一、树莓派Linux源码配置
1、概念:
驱动代码的编译需要一个提前编译好的内核,想要编译内核就必须先配置配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核厂家配备Linux内核源码,比如说买了树莓派,就会有树莓派linux内核源码
第一种方式:
使用厂家.config
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig
第二种方式:
make menuconfig 一项项配置,通常是基于厂家的config来配置
第三种方式:
完全自己编写
2、配置步骤:
下载交叉编译工具及Linux源码(参考博文:学习笔记八)
下载所需库:
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
sudo apt-get install zlib1g:i386
使用源码自带的config配置:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
ARCH=arm 指定ARM架构
CROSS_COMPILE=arm-linux-gnueabihf- 指定编译器
KERNEL=kernel7 树莓派
make bcm2709_defconfig 主要核心指令
使用make menuconfig作进一步配置,无修改可不执行(需要ncurse库,下载方式在上面)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
驱动两种加载方式:
“ * " 编译进内核 zImage包含了驱动
"M "模块方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载
二、树莓派Linux内核编译
1、编译:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs-j4指定用多少电脑资源进行编译zImage生成内核镜像modules要生成驱动模块dtbs生成配置文件
编译成功后,看到源码树目录多了vmlinux,失败则无此文件
生成目标zImage镜像在arch/arm/boot底下
2、打包zImage成树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
在拔出树莓派的SD卡前,先用命令uname -a查看一下内核的版本(4.14.98-v7)
3、数据拷贝(将树莓派的SD卡插入读卡器中)
创建文件夹用来挂载
mkdir data1 data2
挂载U盘(SD卡由两个分区,fat和ext4)
sudo mount /dev/sdb1 data1----fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2----ext4分区,也就是系统的根目录分区
安装modules, 设备驱动文件: hdmi usb wifi io …
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=【ext4所挂载目录】 modules_install
安装更新 kernel.img 文件,注意镜像名字是kernel7.img
4.1 进入fat分区,备份原镜像kernel7.img为kernelOLD.img
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img
4.2 再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/chenlc/data1/kernel7.img
拷贝相关配置文件
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/
4、在虚拟机中断开U盘的连接,然后连接到windows上修改U盘内cmdline.txt内容,将串口用来打印调试信息
内容如下:dwc_otg.lpm_enable=0 console=tty1 console=serial0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
5、将SD卡插回树莓派,用串口查看启动的信息
命令uname -a 查看kernel已经改变,由4.14.98-v7变为4.14.114-v7