Linux驱动开发(四)---树莓派内核编译

54 篇文章 40 订阅
22 篇文章 80 订阅

前文回顾

《Linux驱动开发(一)—环境搭建与hello world》

《Linux驱动开发(二)—驱动与设备的分离设计》

《Linux驱动开发(三)—设备树》
继续宣传一下韦老师的视频

70天30节Linux驱动开发快速入门系列课程【实战教学、技术讨论、直播答疑】

在这里插入图片描述
不过受限于没有钱的烦恼,没去买那么贵的开发板,我决定用树莓派来继续驱动开发的学习。所以需要先搭建一个树莓派的开发环境,能够编译内核模块,并且能够修改DTS,才能进行下一步的学习。
在这里插入图片描述

编译环境

我这里的宿主机安装的ubuntu18,64位的。安装好系统之后,需要安装一些必要软件

sudo apt update
sudo apt install net-tools
sudo apt-get install openssh-server
sudo apt-get install git
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev

下面的步骤参考
官网说明,喜欢看英文的朋友可以移步这里,
在这里插入图片描述

安装交叉编译工具

编译32位系统

sudo apt install crossbuild-essential-armhf

编译64位系统

sudo apt install crossbuild-essential-arm64

下载内核代码

git clone --depth=1 https://github.com/raspberrypi/linux

源码编译

我用的是3b+的板子,首先要生成配置文件,其实就是把默认配置拷贝过来。

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

如果是其他的,
树莓派 1, Zero and Zero W, 树莓派 Compute Module 1:

cd linux
KERNEL=kernel
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig

树莓派 2, 3, 3+ and Zero 2 W, and 树莓派Compute Modules 3 and 3+:

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

树莓派 4 and 400, and 树莓派 Compute Module 4:

cd linux
KERNEL=kernel7l
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig

然后根据配置文件进行编译全部内容

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

大概花了我一个多小时,虚拟机,单核2G,确实有点慢
在这里插入图片描述

到此,编译内核的过程就完毕了。

内核替换

首先需要把SD卡通过读卡器接入ubuntu这个编译服务器,然后能看到sdb设备

pgg@ubuntu:~$ ls /dev/sd
sda   sda1  sdb   sdb1  sdb2 

在这里插入图片描述

其中,sdb1是FAT文件系统(引导)分区,sdb2是ext4文件系统(根)分区。

然后分别挂载这两个设备,我这里用了绝对路径,和官方的不太一样。

mkdir -p /home/pgg/mnt
mkdir -p /home/pgg/mnt/fat32
mkdir -p /home/pgg/mnt/ext4
sudo mount /dev/sdb1 /home/pgg/mnt/fat32
sudo mount /dev/sdb2 /home/pgg/mnt/ext4

通过mount命令可以查看
在这里插入图片描述
然后将编译好的kernel模块安装到SD卡

32位系统安装命令:

sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/home/pgg/mnt/ext4 modules_install

64位系统安装命令

sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=/home/pgg/mnt/ext4 modules_install

最后,拷贝内核和设备树,

32位系统安装命令

sudo cp /home/pgg/mnt/fat32/$KERNEL.img /home/pgg/mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm/boot/zImage /home/pgg/mnt/fat32/$KERNEL.img
sudo cp arch/arm/boot/dts/*.dtb /home/pgg/mnt/fat32/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /home/pgg/mnt/fat32/overlays/
sudo cp arch/arm/boot/dts/overlays/README /home/pgg/mnt/fat32/overlays/
sudo umount /home/pgg/mnt/fat32
sudo umount /home/pgg/mnt/ext4

64位系统安装命令

sudo cp /home/pgg/mnt/fat32/$KERNEL.img /home/pgg/mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image /home/pgg/mnt/fat32/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /home/pgg/mnt/fat32/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /home/pgg/mnt/fat32/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /home/pgg/mnt/fat32/overlays/
sudo umount /home/pgg/mnt/fat32
sudo umount /home/pgg/mnt/ext4

另一种选择是将内核复制到同一个位置,但使用不同的文件名,例如kernel-a.img,并不是覆盖内核。
然后可以config.xt文件来选择Raspberry Pi将引导的内核:
例如
kernel=kernel-a.img

这样做的好处是将自定义内核与系统和任何自动更新工具管理的库存内核映像分开,并允许您在内核无法启动时轻松还原到库存内核。
就是一个内核选择启动
在这里插入图片描述

最后插回SD卡,重启。

两个消息

一个好消息,系统成功启动,基本正常。
一个坏消息,无线网卡没有了,只能用有线连接网络。这个问题后边再查。不能耽误学习进度。
在这里插入图片描述

结束语

今天的热门应该是前某大公司DD被罚了80个亿,理由是各种违法违规的操作,手机用户信息啥的,不过试想手机里哪个APP不是如此,连手机本身都成了窃听器了。
在这里插入图片描述
不过人家也是无利不起早,只要我够穷,就不会被他们利用。
在这里插入图片描述

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
树莓派4B的内核开发可以按照以下步骤进行: 1. 首先,下载内核源码。可以使用以下命令克隆树莓派Linux内核源码库: ``` git clone --depth=1 https://github.com/raspberrypi/linux --branch rpi-5.4.y ``` 这将下载最新的树莓派Linux内核源码。 2. 安装所需的依赖项。使用以下命令安装所需的软件包: ``` sudo apt install raspberrypi-kernel-headers sudo apt install git bc bison flex libssl-dev make ``` 这将安装所需的内核头文件和其他开发工具。 3. 进入内核源码目录并进行配置。使用以下命令进入内核源码目录: ``` cd linux ``` 然后,使用以下命令配置内核: ``` KERNEL=kernel7l make bcm2711_defconfig ``` 这将使用默认配置文件进行内核配置。 4. 编译内核并安装。使用以下命令编译内核和模块: ``` make -j4 zImage modules dtbs ``` 然后,使用以下命令安装内核模块: ``` sudo make modules_install ``` 接下来,将设备树二进制文件复制到/boot/目录: ``` sudo cp arch/arm/boot/dts/*.dtb /boot/ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/ ``` 最后,将编译生成的内核映像复制到/boot/目录: ``` sudo cp arch/arm/boot/zImage /boot/$KERNEL.img ``` 5. 重新启动树莓派。使用以下命令重新启动树莓派: ``` sudo reboot -f ``` 这样,你就完成了树莓派4B的内核开发过程。请注意,这只是一个简单的概述,具体的步骤可能会因为不同的环境和需求而有所不同。建议在进行内核开发之前仔细阅读相关文档和指南。 #### 引用[.reference_title] - *1* [树莓派4B内核驱动开发(二)本地编译内核](https://blog.csdn.net/wuspeng/article/details/114040075)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [树莓派 4B 本地编译内核](https://blog.csdn.net/zhoutaopower/article/details/119416771)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胖哥王老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值