Linux内核编译(树莓派)

本文详细介绍了在Ubuntu22.04上为树莓派配置交叉编译工具链的步骤,包括安装必要的库,下载并配置环境变量。接着,文章讲解了如何配置树莓派的Linux内核,包括使用.config文件,makemenuconfig,以及编译内核和生成模块。此外,还提到了在编译过程中遇到的问题及其解决方案,以及如何将编译后的内核镜像和模块安装到树莓派的SD卡中。

注释:编译前需要安装的库:

            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.icon-default.png?t=N7T8https://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/

好了内容到这里就结束了,希望本文可以帮助到你!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值