概述
1驱动代码的编译需要一个提前编译好的内核
>编译内核就必须配置
>配置的最终目标会生成 .config文件,该文件指导Makefile去把有用东西组织成内核
参考文档
https://blog.csdn.net/nicekwell/article/details/78482833
对于我们要用到的有两个仓库:
查看树莓派的版本下载对应版本
uname -r
https://github.com/raspberrypi/linux 内核源码
https://github.com/raspberrypi/tools 交叉编译工具链(仅在交叉编译时用到)
先把交叉编译的配置做好
前提:
交叉编译
一下操作都在内核源码目录中执行
因此我们先从.config这手开始配置
如何生成.config文件:
第一种方式:
厂家配linux内核源码,比如说买了树莓派,现在要研发树莓派的底层,厂家会提供树莓派linux内核源码,直接cp 厂家.config .config
第二种方式:
make menuconfig 一项项配置,通常是基于厂家的config来配置的。
第三种方式:
完全自己来
3、配置config
linux源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig;
树莓派2、3的工程是bcm2709_defconfig。
3.1 使用源码里自带的config
内核配置:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定编译器 树莓派 主要核心指令
此命令功能是获取bcm2709_defconfig的配置到 .config里。
将厂家的config变成了.config
编译:
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
执行menuconfig修改配置(如果不需修改可以跳过)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
编译
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
//-j4指定用多少电脑资源来编译,4是4进程。
//zImage是生成内核镜像
//modules要生成驱动模块
//dtbs是生成配置文件
编译成功后,看到源码树目录多了vmlinux,失败则无此文件
成功后,目标zImage镜像arch/arm/boot底下
打包zImage成树莓派可用的xxx.img
直接用linux源码包里的工具:
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
镜像的拷贝:
一、挂载树莓派sd卡,并安装编译出的DIRECTLY 到sd卡
把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。
我们生成的文件涉及到这两个分区的内容,一般插入ubuntu后会自动挂载,fat分区可以不用root权限操作,ext4分区需要root权限操作。
两个分区具体挂载在什么地方可以自己决定,以下用[fat]表示boot挂载的路径,[ext4]表示ext4挂载的路径。
二、挂载
插入sd卡输入dmesg去查看内核的信息,如有设备接入,内核会打印一些驱动方面的信息,如图:会看到两个分区,sdb:sdb1和sdb2
mkdir data1
mkdir data2
挂载U盘:
sudo mount /dev/sdb1 data1 一个是fat分区,是boot相关的内容,kernel的img
sudo mount /dev/sdb2 data2 一个是ext4分区,也就是系统的根目录分区
可以cd ls一下查看是否挂载
三、开始拷贝
1、安装modules(也是编译生成的,主要是设备驱动文件,比如:hdmi,usb,wifi…)
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install
//其中的[ext4]是根据自己挂载的文件名称填写,是存放根目录的文件夹路径。
演示:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/ricko/data2 modules_install
2,可以考虑先备份(防止拷贝失败,树莓派不能开机
cd /home/ricko/data1
cp kernel7.img kernel7old.img
再把编译新生成的拷贝到data1,起名kernel7.img
cp kernel_new.img /home/ricko/data1/kernel7.img
du 查看文件大小是否正确
拷贝配置文件
cp arch/arm/boot/dts/.*dtb* /home/ricko/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/ricko/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/ricko/data1/overlays/
更新完成后插回树莓派即可开机,可以通过串口开机(可以看操作系统是否起来了),开机后可以用 uname -a 命令查看kernel信息已经改变。
最后
以上就是开朗大树为你收集整理的树莓派Linux源码配置以及树莓派Linux内核编译的全部内容,希望文章能够帮你解决树莓派Linux源码配置以及树莓派Linux内核编译所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复