Linux kernel raspberry pi 4的交叉编译内核
我是linux新手,我真的需要你的帮助 我正在为我的期末实习项目工作:控制传感器并在LCD屏幕上显示结果 为此,我将使用raspberry并创建一个用于显示传感器结果的QT应用程序 引导时间需要非常短,因此我想为我的raspberri pi-4 b创建一个最小的内核 我为arm64做了交叉编译:Linux kernel raspberry pi 4的交叉编译内核,linux-kernel,cross-compiling,boot,sd-card,raspberry-pi4,Linux Kernel,Cross Compiling,Boot,Sd Card,Raspberry Pi4,我是linux新手,我真的需要你的帮助 我正在为我的期末实习项目工作:控制传感器并在LCD屏幕上显示结果 为此,我将使用raspberry并创建一个用于显示传感器结果的QT应用程序 引导时间需要非常短,因此我想为我的raspberri pi-4 b创建一个最小的内核 我为arm64做了交叉编译: mkdir rasp_arm64 cd rasp_arm64/ git clone --depth=1 https://github.com/raspberrypi/linux sudo apt-get
mkdir rasp_arm64
cd rasp_arm64/
git clone --depth=1 https://github.com/raspberrypi/linux
sudo apt-get install qemu-system-arm
sudo apt-get install lzop
sudo apt-get install gcc-aarch64-linux-gnu
cd linux/
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- mrproper
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
这就是我所做的
我如何为我的raspberry pi 4的a bootalbe SD卡创建一个.img文件
我也曾在
我补充道(cen有人也澄清了为什么我们需要这个)
KERNEL=kernel8
在那之后我做到了
make ARCH=arm64 CROSS\u COMPILE=aarch64 linux gnu-Image modules dtb
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo挂载/dev/sdb6 mnt/fat32
sudo挂载/dev/sdb7 mnt/ext4
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
我得到一个错误,告诉mnt/fat32/.img没有这样的文件或目录
我也试过了
$ sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
cp: target 'mnt/fat32/overlays/' is not a directory
所以我试着创造它
$ mkdir mnt/fat32/overlays
mkdir: cannot create directory ‘mnt/fat32/overlays’: Permission denied
有人能帮我吗?我已经陷入这个错误两周了,我需要构建我的内核来开始处理它
我也不知道这个版本的内核和配置是否是最小的。我可以用这个配置有一个最小的启动时间吗(我想改变启动顺序,一开始只启用我的应用程序所需的设备,但当然我不知道怎么做),如果有人可以帮助,请告诉我!!即使你知道一个好的教程来推荐我
如果有人能帮助我,我将不胜感激。这里明显的问题是,
$KERNEL
的计算结果为零。这可能是因为它在本地分配了一个值,而没有导出。
使用
export KERNEL=kernel8
这将确保无论在何处使用
$KERNEL
都将其计算为kernel8
,这将解决问题,并且sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL backup.img
将作为sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8 backup.img
执行。这里明显的问题是$KERNEL
的计算结果为零。这可能是因为它在本地分配了一个值,而没有导出。
mkdir rasp_off_exp
cd rasp_off_exp/
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
sudo apt install crossbuild-essential-arm64
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux/
export KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
lsblk
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/mmcblk0p1 mnt/fat32
sudo mount /dev/mmcblk0p2 mnt/ext4
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8-backup.img
使用
export KERNEL=kernel8
这将确保$KERNEL
评估为kernel8
,无论在何处使用,这将解决问题,并且sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL backup.img
将作为sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8 backup.img>执行
mkdir rasp_off_exp
cd rasp_off_exp/
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
sudo apt install crossbuild-essential-arm64
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux/
export KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
make -j8 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
lsblk
mkdir mnt
mkdir mnt/fat32
mkdir mnt/ext4
sudo mount /dev/mmcblk0p1 mnt/fat32
sudo mount /dev/mmcblk0p2 mnt/ext4
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8-backup.img
这是代码,但是
我得到
这是代码,但是
我得到
处的说明缺少一个步骤,请切换其他两个步骤的顺序。
这项工作:
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
sudo mkdir mnt/fat32/overlays
sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
处的说明缺少一个步骤,请切换其他两个步骤的顺序。
这项工作:
sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img
sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/
sudo mkdir mnt/fat32/overlays
sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/
谢谢,但它对我不起作用:(我只是创建了一个新目录,并按照您所说的“KERNEL=kernel8”进行了替换)通过“export KERNEL=kernel8”,我执行了“sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8 backup.img”,但我得到了“cp:cannot stat'mnt/fat32/kernel8.img”:没有这样的文件或目录”error@amina我明白了(据我所知,失败的命令是备份当前内核映像的命令。如果它不存在,那么进行备份就没有意义。您可以尝试在跳过备份的同时继续该过程吗,即sudo cp…
part?我尝试了$sudo cp arch/arm64/boot/image mnt/fat32/$kernel.img
$sudo cp-arch/arm64/boot/dts/broadcom/*.dtb-mnt/fat32/
我没问题,但当我尝试$sudo-cp-arch/arm64/boot/dts/overlays/*.dtb*mnt/fat32/overlays/
时,目标'mnt2/fat32/overlays/'不是目录
$sudo-cp-arch/arm64/boot/dts/overlays/README-mnt/fat32/overlays/
无法创建常规文件“mnt2/fat32/overlays/”:不是目录因此我尝试在mnt/fat32中创建覆盖,但无法工作linux/mnt/fat32$mkdir overlays mkdir:无法创建目录“overlays”:权限被拒绝
我如何修复ls:linux/mnt/fat32$ls
的结果是bcm271-rpi-2-b.dtb bcm2711-rpi-400.dtb bcm2837 rpi-3-b.dtb bcm2710-rpi-3-b.dtb bcm2711-rpi-4-b.dtb bcm2837-rpi-3-b-plus.dtb bcm2710-rpi-3-b-plus.dtb bcm2711-rpi-cm4.dtb bcm2837-rpi-io3.dtb bcm2710-rpi-cm3.dtb bcm2837-rpi-3-a-plus.dtb kernel8.img
是的,很抱歉,我很抱歉,我开始使用Raserry pi来重播我的应用程序太晚了!因为我无法修复这个错误但它对我不起作用:(我只是创建了一个新的目录,然后按照您所说的“KERNEL=kernel8”进行替换)通过“export KERNEL=kernel8”,我执行了“sudo cp mnt/fat32/kernel8.img mnt/fat32/kernel8 backup.img”,但我得到了“cp:cannot stat'mnt/fat32/kernel8.img”:没有这样的文件或目录”error@amina我明白了(据我所知,失败的命令是备份当前内核映像的命令。如果它不存在,那么进行备份就没有意义。您可以尝试在跳过备份的同时继续该过程吗,即sudo cp…
part?我尝试了$sudo cp arch/arm64/boot/image mnt/fat32/$kernel.img
$sudo cp-arch/arm64/boot/dts/broadcom/*.dtb-mnt/fat32/
我没问题,但当我尝试$sudo-cp-arch/arm64/boot/dts/overlays/*.dtb*mnt/fat32/overlays/
时,目标'mnt2/fat32/overlays/'不是目录$sudo-cp-arch/arm64/boot/dts/overlays/README-mnt/fat32/overlays/
无法创建常规文件“mnt2/fat32/overlays/”:不是目录,因此我尝试在mnt中创建覆盖