配置适合树莓派的linux内核(配置,编译,拷贝到树莓派sd卡)

树莓派linux源码配置

需要对驱动代码进行编译

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

配置内核源码有三种方式

通常我们购买芯片,厂家会配linux内核源码,比如说买了树莓派,就提供树莓派linux内核源码

第一种方式

使用厂家提供的config进行配置

查找厂家config指令find . -name *_defconfig
在这里插入图片描述
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig——此命令功能是获取bcm2709_defconfig的配置到 .config里

也可以使用cp arch/arm/configs/bcm2709_defconfig .config然后去使用这个.config

ARCH=arm (指明当前要编译arm,虽然树莓派是64位的,这里仍然选择arm,而不是arm64)
CROSS_COMPILE=arm-linux-gnueabihf- ( 指明交叉工具链名称)
KERNEL =kernel7 (指明kernel类型,树莓派1设置为kernel,树莓派2、3设置为kernel7)
make bcm2709_defconfig (make为配置命令)

在这里插入图片描述

第二种方式

使用make menuconfig 一项项配置,通常是基于厂家的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

执行ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
出现配置界面(下图):
在这里插入图片描述

General setup —>(通用选项)
[ * ] Enable loadable module support —> 内核模块选项
[ * ]Enable the block layer —> 块设备逻辑层选项(大文件支持、分区、I/O调度)
System Type —>(平台选项)
Bus support —> 总线选项
Kernel Features —>内核特征
Boot options —> 引导选项
CPU Power Management —> CPU电源管理选项
Floating point emulation —> 浮点运算
Userspace binary formats —> 用户程序格式
Power management options —> 电源管理选项
[*] Networking support —> 网络协议选项
Device Drivers —> 设备驱动
Firmware Drivers ---- 驱动固件选项
File systems —> 文件系统选项
Kernel hacking —> 内核调试选项
Security options —> 安全模块选项

比如进行配置的是驱动部分
在这里插入图片描述
在这里插入图片描述
指令解析:——使用空格可以切换[ ]里面的模式

[ * ] :编译进内核 (* 代表Y,编译进内核 zImage文件包含了驱动)

[ M ]:编译成模块 (以模块的方式生成驱动文件xxx.ko 系统启动后,通过命令inmosd xxx.ko 加载驱动)
[ ] : 表示不需要的部分

保存后退出
在这里插入图片描述

第三种方式

完全自己配置。

linux内核源码的编译

编译指令

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

命令:make -j4 zImage modules dtbs

-j4 用多少电脑资源进行编译 (4核)

zImage 生成内核镜像

modules 要生成的驱动模块

dtbs 要生成的配置文件

(大概编译20分钟后)查看是否编译成功的方法
1.首先看看编译过程有没有报错

2.源码目录树文件是否生成 vmlinux 文件,有就成功,失败则无此文件
在这里插入图片描述
3.linux-rpi-4.14.y/arch/arm/boot 查看此内核文件路径下 zImage (我们需要的目标镜像)内核镜像文件的生成
在这里插入图片描述

vmlinux是未压缩的liunx,zImage是压缩好的liunx(是ARM Linux常用的一种压缩映像文件)

将zImage内核镜像打包成为树莓派可用的xxx.img
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
在本目录生成一个kernel_new.img文件,这个文件就是要放到sd卡中的文件
在这里插入图片描述
插入装有树莓派linux的sd卡(使用读卡器)到Ubuntu
在这里插入图片描述
dmesg 查看打印内核的一些信息
在这里插入图片描述

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

新建两个文件夹data1 data2(用来挂载树莓派的两个分区)
mkdir data1 data2
在这里插入图片描述
挂载U盘

sudo mount /dev/sdb1 data1 挂载U盘里sdb1文件分区到当前目录data1文件夹,fat分区(是存放boot相关的内容,kernel的img)

sudo mount /dev/sdb2 data2 挂载U盘里sdb2文件分区到当前目录data2文件夹,ext4分区(根目录分区)
在这里插入图片描述

为什么要挂载
比如mount /dev/sdb1 ~/Share/ ,把新硬盘的区sdb1挂载到工作目录的~ /Share/文件夹下,之后访问这个~/Share/文件夹就相当于访问这个硬盘的sdb1分区了,对/Share/的任何操作,都相当于对sdb1里文件的操作。
所以Linux下,mount挂载的作用,就是将一个设备(通常是存储设备)挂接到一个已存在的目录上。访问这个目录就是访问该存储设备。

安装modules(用于安装设备驱动文件: hdmi usb wifi io …)
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install

操作ext4分区,需要root权限。
[ext4]为第二分区(sdb2)虚拟机上挂载的地址(data2的位置),需要根据自己的地址更改

在树莓派linux源码目录执行
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/cyh/data2 modules_install
在这里插入图片描述
在这里插入图片描述
安装更新 kernel.img 文件,注意镜像名字是kernel7.img(kernel是特殊的,官方给的)
在这里插入图片描述
备份一下防止出错了无法还原
cp kernel7.img kernel7Backup.img

再把直接编译新生成的kernel_new.img拷贝到data1,取名kernel7.img(覆盖之前的)
cp kernel_new.img /home/cyh/data1/kernel7.img
查看镜像文件md5值(这步很重要),如果两次值不同,则需要重新拷贝
指令:md5sum
在这里插入图片描述
拷贝其他配置文件
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/
操作fat分区,需要root权限。
[fat]为第一分区(sdb1)虚拟机上挂载的地址(data1的位置),需要根据自己的地址更改

cp arch/arm/boot/dts/.*dtb* /home/cyh/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/cyh/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/cyh/data1/overlays/

把sd卡插入树莓派启动
在这里插入图片描述
删除挂载到linux的文件夹

fuser -km 文件夹
sudo umount 文件夹
rm -rf 文件夹

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值