树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

一、树莓派Linux源码配置(适合树莓派)

总体概述

在这里插入图片描述

配置的三种方式

参照博文(一般厂家会给到这样的操作手册,没有就凉凉了,玩不了):http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html

前提:交叉编译工具要先安装好,在我的博文树莓派内核开发准备第一节有讲到。因为内核配置全部在宿主机ubuntu下完成的,必须要有交叉编译工具。

1.照搬厂家的配置(使用这种方式)

在内核源码目录文件下搜索厂家配置文件(此步骤作为了解)
可以找到树莓派3、树莓派4使用的厂家配置文件bcm2709_defconfig

find . -name *_defconfig

在这里插入图片描述

  • 执行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

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

在这里插入图片描述

  • 执行结果
    可以发现 厂家config 变成了 .config

在这里插入图片描述

2.参考厂家的配置(感受一下)

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

首先要安装必要的库

  • 系统自带,一般都有
sudo apt-get install bc
  • 必须
sudo apt-get install libncurses5-dev libncursesw5-dev
  • 必须
sudo apt-get install zlib1g:i386
  • ↓ 若这一步提示“E: 无法定位软件包 lib32ncurses5”可以先留着不做
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

执行menuconfig

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

可以看到以下界面

在这里插入图片描述
在这里插入图片描述

回车 selects submenus 进入子菜单带—>的
[ ]表示略过的,不参与编译
空格键切换状态

驱动的两种加载方式:

  • [*] built-in:表示编译进了内核,zImage包含了驱动。
  • [M] modularizes:表示以模块的方式生成驱动文件xxx.ko。系统启动后,通过命令inmosd xxx.ko临时加载(后面的驱动就是这么进行的)

3.完全自主配置(需要一定工作经验)

可以工作2-3年后在涉猎。

二、树莓派Linux内核编译

在这里插入图片描述

编译指令:

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

是否成功编译?

可以看到在内核的源码树目录下生成了vmlinux(没有压缩的linux)即为成功。
在这里插入图片描述

而我们真正想要的目标镜像是/arch/arm/boot/zImage
在这里插入图片描述

三、树莓派挂载新内核

总体概述

在这里插入图片描述

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

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

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

2.树莓派sd卡挂载到ubuntu上(两个分区:boot kernal/根文件)

树莓派断电,把SD卡插入读卡器后按照下图配置
在这里插入图片描述

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

dmesg

接入成功!
在这里插入图片描述

sdb1,2分别是树莓派sd卡的两个分区
①一个fat分区。是boot相关的内容,kernel的img文件在此分区。
②一个是ext4分区,也就是系统的根目录分区。(cd /进入的就是系统的根目录)

这里我在我的ubuntu桌面底下(/Desktop)新建两个文件夹

mkdir data1
mkdir data2

然后分别关联到sd卡的两个分区中(必须挂载到文件夹才能看到里面内容)

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

查看data1,2分别存放的是什么
在这里插入图片描述
可以看到data1为fat分区(boot、kernal相关),data2为ext4分区(系统根目录相关),要对应好。

老陈这里的boot用的之前刷机刷好的,没有重新进行移植,下面直接讲了内核的移植。

3.安装modules

modules就是内核驱动相关,少了这一步类似网卡,wifi,usb,HDMI这些都用不了

注意:操作的是ext4分区,对应的就是data2

来到linux-rpi-1.14.y文件路径下操作

安装modules的指令是:

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

实际使用的时候要将“[ext4]”更改为自己data2的绝对路径 ,这里根据我自己的文件路径修改成:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zhugl/Desktop/data2 modules_install

可以看到很多的.ko文件,这与驱动相关。出现的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。

在这里插入图片描述

4.拷贝新kernel.img文件

注意查看原来镜像名字是kernel7.img

ls /home/zhugl/Desktop/data1

在这里插入图片描述
因为原来的这个kernel7.img将要被覆盖(树莓派镜像规定必须要定义成这个名字),为了防止刷机失败,或者拷贝过程中文件损坏,需要提前用别名备份这个文件。打开新的终端(ctrl alt t)(方便操作罢了),进入其存放路径(cd /home/zhugl/Desktop/data1)

sudo cp kernel7.img kernel7OLD.img

从源码树目录(linux-rpi-4.14.y)拷贝kernel_new.img(是由zImage打包而成)到data1并且命名为kernel7.img覆盖原来的文件

sudo cp kernel_new.img /home/zhugl/Desktop/data1/kernel7.img

检查拷贝是否有问题

md5sum显示文件的唯一编码号,若相同则为同一个文件

md5sum kernel_new.img
md5sum /home/zhugl/Desktop/data1/kernel7.img

在这里插入图片描述
编码号一样,拷贝正确。

5.拷贝其他文件到fat

都是从目录linux-rpi-4.14.y进行拷贝

这些配置文件是为了能够加载驱动以及一些其他的配置。

————————①

  • 更改前
cp arch/arm/boot/dts/.*dtb* [fat]/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/.*dtb* /home/zhugl/Desktop/data1/

————————②

  • 更改前
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/zhugl/Desktop/data1/overlays/

————————③

  • 更改前
    README有没有都行
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
  • 根据实际更改后
sudo cp arch/arm/boot/dts/overlays/README /home/zhugl/Desktop/data1/overlays/

四、在树莓派上运行

1.用window配置sd卡文件方便观看启动过程

如果之前在做别的项目,例如串口编程时用于串口数据交互和传输会把这个配置信息删掉,这时需要添加回来,用来观察操作系统启动过程
在这里插入图片描述
点击选择断开连接sd卡,使其重新挂载在windows上。
在这里插入图片描述
打开sd卡中boot文件夹下的cmdline.txt

按照上图位置添加(直接在虚拟机上修改这个配置文件也可以)

console=ttyAMA0,115200

2.sd卡插回树莓派

sd卡插回树莓派,USB-TTL连接。注意树莓派要在断电下操作

3.打开secureCRT 串口方式登陆树莓派

树莓派重新上电,可以看到启动正常。

如何确定内核已经更换了呢?

查看内核版本号

uname -r

原来版本为4.14.98-v7
在这里插入图片描述
所以成功啦!

有意思的是,之前在上一个内核版本树莓派里编写的一些Demo文件都在!而且以前配置的SSH登录、固定IP地址配置都原样不动!所以内核新配置的那两个分区并没有改变以前的一些文件和配置,因为我们只是更新了kernal.img,Uboot和根文件系统都没改变。
在这里插入图片描述

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 这个问题可能有多种原因。以下是一些可能的解决方案: 1. 检查摄像头是否已正确连接到计算机并已打开。您可以尝试重插拔摄像头并检查其是否已正确安装。 2. 检查您是否有权限访问该文件。您可以尝试以管理员身份运行您的应用程序。 3. 检查您的应用程序是否正确地调用了摄像头设备文件。您可以尝试检查您的应用程序的源代码,特别是摄像头调用的代码。 4. 检查您的操作系统是否已正确配置摄像头设备文件。您可以尝试在终端中输入“lsusb”命令,以查看您的计算机是否已正确识别摄像头设备。 5. 检查您是否已安装正确的摄像头驱动程序。您可以尝试在终端中输入“lsmod”命令,以查看摄像头驱动程序是否已正确加载。 如果您尝试了以上所有解决方案,仍然无法打开摄像头设备文件,则可能需要联系设备制造商或操作系统维护人员寻求帮助。 ### 回答2: 当Kernal生成摄像头设备文件video时,出现无法打开文件的情况可能有以下几个原因: 1. 权限问题:摄像头设备文件可能没有正确的权限设置,导致无法打开。可以使用chmod命令为设备文件设置正确的权限,例如:sudo chmod 777 /dev/video0。 2. 设备文件不存在:有时候,由于某些原因,Kernal生成的设备文件可能会丢失或不存在。可以通过查看/dev目录下是否存在对应的video设备文件来确认。 3. 摄像头驱动问题:Kernal生成的摄像头设备文件需要相应的摄像头驱动程序才能正常工作。如果缺少或有误的驱动程序,可能导致无法打开该设备文件。可以尝试升级或重安装摄像头驱动程序。 4. 其他硬件或软件问题:无法打开摄像头设备文件可能也与其他硬件或软件问题有关。可能是摄像头硬件连接有问题,或者与其他设备冲突导致无法正常打开。 针对以上问题,可以尝试以下解决方法: 1. 检查设备文件权限,确保有足够的权限打开设备文件。 2. 确认摄像头设备文件存在,如果不存在可以尝试重连接摄像头或重加载摄像头驱动。 3. 检查摄像头驱动是否正确安装,如果有问题可以尝试升级或重安装驱动程序。 4. 检查硬件连接是否正常,确保摄像头与计算机正确连接。 5. 如果问题仍然存在,可以尝试在Kernal中查找相关错误信息或者在互联网上搜索类似问题的解决办法。 ### 回答3: 如果内核生成了摄像头设备文件video,但无法打开此文件,可能有以下几个原因: 1. 设备文件路径错误:请确认所打开的文件路径是否正确。在Linux系统中,设备文件一般位于/dev目录下,因此需要确认路径是否包含了/dev前缀和正确的设备文件名。 2. 权限问题:请检查当前用户对该设备文件的权限。尝试使用命令"ls -l"查看设备文件的权限设置,确保您拥有读取和写入设备文件的权限。如果您没有权限,可以使用"chmod"命令修改权限或者使用"sudo"命令以管理员身份运行程序。 3. 设备驱动问题:可能是由于设备驱动程序没有正确加载或存在问题导致无法打开设备文件。您可以检查系统日志文件(/var/log/syslog或/var/log/messages)以查找与设备驱动相关的错误信息,或尝试重加载设备驱动程序。 4. 设备故障:如果以上步骤都没有解决问题,可能是因为摄像头设备本身出现了故障。您可以尝试在其他系统或设备上测试该摄像头,或者联系设备制造商获取更多技术支持。 总的来说,无法打开kernal生成的摄像头设备文件video可能是由于文件路径错误、权限问题、设备驱动问题或设备本身故障所导致。通过仔细检查和排除这些可能性,您应该能够解决无法打开文件的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

行稳方能走远

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

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

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

打赏作者

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

抵扣说明:

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

余额充值