注释:编译前需要安装的库:
sudo apt-get install bc
sudo apt-get install libncurses5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install make
一、树莓派交叉编工具链
Raspberry Pi · GitHubRaspberry Pi has 53 repositories available. Follow their code on GitHub.
https://github.com/raspberrypi 1、下载文件: tools-master.zip
2、文件夹打开顺序:
(1)cd arm-bcm2708
(2)cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64
(3)cd bin
(4)运行arm-linux-gnueabihf-gcc -v

3、配置环境变量【使交叉编译工具在所有目录下都可以使用】
(一)临时有效
echo $PATH //显示当下环境变量
export PATH= (echo $PATH结果) +(pwd结果) //配置环境变量
注:(先用临时在home运行一下,合适直接复制到.bashrc)
(二)永久有效cdcdcd
修改工作目录下的 .bashrc (隐藏文件) 【.bashrc: 配置命令终端】
(1)在.bashrc文件中输入 export PATH=echo $PATH + pwd
echo $PATH: /Usr/ ......games:
pwd: 全部路径
(2) source /home/yhr/.bashrc
二、如何配置树莓派的Linux内核
(一)配置config
作用:该文件指导Makefile去把有用的东西组织成内核。
1、Linux源码中有很多工程:
树莓派1的工程是:bcmrpi_defconfig
树莓派2、3的工程是bcm2709_defconfig
(1)使用源码中自带的 .config : 获取bcm2709_defconfig的配置到.config里
先编译以下任意一个,获得 .config 在编译内核
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架构 指定的编译器 树莓派(厂家要求的) 主要核心指令
(2)make menuconfig:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
(二) 编译内核(在linux-rpi-4.14.y文件夹下运行)
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
指定用多少电脑资源进行编译
生成内核镜像
生成驱动模块
生成配置文件
出现的问题 :(我的系统Ubuntu22.04)

解决办法 :
vi scripts/dtc/dc-parser.tab.c
在1177行或者1205行,把YYSTYPE yylloc注释掉

(三)
1、编译成功后,看到源码目录多了vmlinux,失败则无文件;成功后,目标 zImage镜像 arch/arm/boot 底下
2、打包 zImage 成树莓派可用的 xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

(四) 数据拷贝
把树莓派内存卡插到电脑上

1、创建准备挂载的目录 mkdir data1 data2
2、挂载U盘 : (挂载分区)
(1)一个fat分区,是boot相关的内容,kernel的img【这一步要在和data1在同一目录下运行】
sudo mount /dev/sdb1 data1
(2) 一个是ext4分区,也就是系统的根目录分区
sudo mount /dev/sdb2 data2
(五)安装modules( 设备驱动文件,hdmi,wifi...... )【没有这步树莓派上述功能用不了】
注:在linux-rpi-4.14.y目录下运行
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/yhr/Linux/data2 modules_install
(六)安装更新kernel.img文件
注:镜像名字是: kernel7.img(原来的内核)
(1)先备份原来的内核:
cd /home/yhr/Linux/data1
cp kernel7.img kernel7OLD.img
(2)再把编译新生成的拷贝到data1,起名kernel7.img
注:在linux-rpi-4.14.y下运行
cp kernel_new.img /home/yhr/Linux/data1/kernel7.img
(七)复制其他文件
(1)cp arch/arm/boot/dts/.*dtb* /home/yhr/Linux/data1
(2)cp arch/arm/boot/dts/overlays/.*dtb* /home/yhr/Linux/data1/overlays/
(3)cp arch/arm/boot/dts/overlays/README /home/yhr/Linux/data1/overlays/
(八)把卡插回树莓派,用串口检查一下操作系统能不能跑起来
uname -r : 检查自己的内核是否更换成功了 4.14.114-v7
总结 一下:
这里说我的设备情况及文件位置:
(1)Ubuntu22.04LTS
( 2) data1 data2 : /home/yhr/Linux/
( 3) linux-rpi-4.14.y: /home/yhr/Linux/SYSTEM/
好了内容到这里就结束了,希望本文可以帮助到你!
本文详细介绍了在Ubuntu22.04上为树莓派配置交叉编译工具链的步骤,包括安装必要的库,下载并配置环境变量。接着,文章讲解了如何配置树莓派的Linux内核,包括使用.config文件,makemenuconfig,以及编译内核和生成模块。此外,还提到了在编译过程中遇到的问题及其解决方案,以及如何将编译后的内核镜像和模块安装到树莓派的SD卡中。
609

被折叠的 条评论
为什么被折叠?



