我是靠谱客的博主 清爽冥王星,最近开发中收集的这篇文章主要介绍配置树莓派的Linux内核源码前言一、获取编译所需源码和交叉编译工具二、配置交叉编译工具三、配置config四、编译五、挂载树莓派 sd卡,并安装编译出的 DIRECTLY 到 sd卡六、在树莓派上运行,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、获取编译所需源码和交叉编译工具
    • linux内核源码
    • tool交叉编译工具
  • 二、配置交叉编译工具
    • 手动配置环境变量:
    • 自动配置环境变量:
  • 三、配置config
    • 使用厂家配的Linux内核源码
    • make menuconfig
    • 自己配置
  • 四、编译
  • 五、挂载树莓派 sd卡,并安装编译出的 DIRECTLY 到 sd卡
    • 镜像拷贝
    • 数据拷贝
    • 安装modules(设备驱动文件)
    • 安装更新kernel.img文件
    • 拷贝其他配置文件到fat
  • 六、在树莓派上运行

前言

驱动代码的编写需要一个提前编译好的内核,编译内核就必须配置内核,配置的最终目标是生成 .config 文件,该文件指导 Makefile 去把有用东西组织成内核

一、获取编译所需源码和交叉编译工具

linux内核源码

进入树莓派官网

在这里插入图片描述

在这里插入图片描述

tool交叉编译工具

在这里插入图片描述

二、配置交叉编译工具

手动配置环境变量:

  1. 获取当前环境变量的值:echo $PATH
  2. 获取交叉编译工具链所在路径:pwd
  3. 手动配置环境变量:export PATH=echo $PATH:pwd

自动配置环境变量:

  1. 进入工作目录:cd ~
  2. 进入工作目录下的 .bashrc 隐藏文件:vi .bashrc
  3. 修改 .bashrc 隐藏文件内容,文件最后一行添加对应内容:export PATH=echo $PATH:pwd
  4. 修改完后 source .bashrc 加载配置文件,马上生效配置。

arm-linux-gnueabihf-gcc -v检查交叉编译工具版本是否配置正确

三、配置config

linux 源码中有很多工程:
树莓派1的工程是bcmrpi_defconfig
树莓派2、3的工程是bcm2709_defconfig

使用厂家配的Linux内核源码

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

注意:这个命令要在路径 /linux-rpi-4.14.y下执行,否则提示 “make: *** 没有规则可制作目标“bcm2709_defconfig”。

参数说明
ARCH=arm指明当前要编译arm(不是arm64)
CROSS_COMPILE指明交叉工具链名称。
KERNEL指明kernel类型,树莓派1设置为kernel,树莓派2、3设置为kernel7

make menuconfig

基于厂家的config,用make menuconfig一项项配置,通常需要自主增删一些驱动

  • 安装一些必要的库

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

可以看到如下界面

在这里插入图片描述

Enter selects submenus 进入子菜单带<>的
[ ]表示略过的,不参与编译
————————驱动的两种加载方式:
* built-in:表示编译进了内核,zImage包含了驱动。
Mmodularizes:表示以模块的方式生成驱动文件xxx.ko。系统启动后,通过命令inmosd xxx.ko加载
————————
空格键可以切换状态

自己配置

四、编译

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

-j4 指定电脑用多少个资源来进行编译。4核(4线程),可自行调整。4核再结合电脑情况,大概要编译20分钟。如果一些工具的配置有错会在最开始就报错,一般是配置的问题。
zImage生成内核镜像
modules生成驱动模块
dtbs生成配置文件

是否成功编译?
可以看到在内核的源码树目录下生成了vmlinux(没有压缩的linux)即为成功
而我们真正想要的目标镜像是 /arch/arm/boot/zImage

用linux源码包里的工具打包zImage文件成kernel_new.img

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

树莓派的镜像文件结尾就是.img,这个文件就是要放到sd卡中的文件.

五、挂载树莓派 sd卡,并安装编译出的 DIRECTLY 到 sd卡

把树莓派的sd卡插入ubuntu系统电脑,树莓派的sd卡有两个分区:
一个fat分区,是boot相关的内容,kernel的img文件就放在这个分区里;
一个是ext4分区,也就是系统的根目录分区。

镜像拷贝

取出树莓派sd卡,插入读卡器,连接到虚拟机。

dmesg:查看内核信息,有设备接入的时候内核会打印出驱动层面的信息。

在这里插入图片描述

数据拷贝

分别创建两个文件夹并挂载两个分区的内容
mkdir data1
mkdir data2

sudo mount /dev/sdb1 data1
sudo mount /dev/sdb2 data2

查看data1,2分别存放的是什么:
data1为fat分区(boot相关),data2为ext4分区(系统根目录相关)

在这里插入图片描述

安装modules(设备驱动文件)

modules就是内核驱动相关,少了这一步类似网卡,wifi,usb,hdmi这些都用不了
注意:操作的是ext4分区,对应的就是data2
来到linux-rpi-1.14.y目录下。
注意将代码的“[ext4]”更改为data2的绝对路径 !!

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH= [ext4] modules_install

安装更新kernel.img文件

镜像名字是kernel7.img,建议先备份再更新

  • 备份kernel7.img(在原目录备份即可,令起名字)(此文件在 fat 分区)
  • 再把刚刚编译新生成的镜像kernel_new.img拷贝cp到 data1(fat分区) 中的kernel7.img文件
  • 查看文件编码检查拷贝是否完整:
    md5sum kernel_new.img // 查看 kernel_new.img 文件编码
    md5sum kernel7.img // 查看 kernel7.img 文件编码

拷贝其他配置文件到fat

都是从目录linux-rpi-4.14.y进行拷贝,这些配置文件是为了能够加载驱动以及一些其他的配置。
注意将代码的“[fat]”更改为data1的绝对路径 !!

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

六、在树莓派上运行

1.用windows配置sd卡文件使其支持串口打印调试信息,观看启动过程
在这里插入图片描述
2.打开secureCRT,串口方式登陆。
sd卡插回树莓派,USB-TTL连接。
可以看到启动正常。

在这里插入图片描述

最后

以上就是清爽冥王星为你收集整理的配置树莓派的Linux内核源码前言一、获取编译所需源码和交叉编译工具二、配置交叉编译工具三、配置config四、编译五、挂载树莓派 sd卡,并安装编译出的 DIRECTLY 到 sd卡六、在树莓派上运行的全部内容,希望文章能够帮你解决配置树莓派的Linux内核源码前言一、获取编译所需源码和交叉编译工具二、配置交叉编译工具三、配置config四、编译五、挂载树莓派 sd卡,并安装编译出的 DIRECTLY 到 sd卡六、在树莓派上运行所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部