网站首页 > 技术教程 正文
后面想使用buildroot和yocto来构建raspberry os。这里用手动的方式来移植bootloader和rootfs,通过这种方式和自动化方式做对比,更能突出后者的优势。
系统从上电到界面显示大致的流程如下,其中必备的3个阶段:bootloader、kernel和rootfs。RomCode是内嵌在CPU或者GPU中的,开发者无法进行修改。
在这里通过移植bootloader和rootfs,对该启动过程有更深入的了解。
环境:
- ubuntu 22.04
- raspiberry 4B
- U盘 64G
U盘格式化
Raspberry4B默认是支持U盘启动的,启动前需要进行格式化,创建2个分区,ROOT和BOOT。
- BOOT - 启动分区,该分区包含了bootloader,kernel,dtb和一些配置文件如cmdline.txt和config.txt等;
- ROOT -根分区,主要包含根文件系统
步骤如下:
1.查看U盘设备:fdisk -l
2.通过parted命令对其进行格式化并创建2个分区:
- boot分区格式为fat32,start位置为1M,end位置为100M;
- root分区格式为ext4,start位置为100M,end位置为U盘剩余空间。
sudo umount /dev/sdb1
sudo parted -s /dev/sdb mklabel msdos mkpart primary fat32 1M 100M mkpart primary ext4 100M 100%
查看结果是否成功:lsblk
3.对创建的分区进行格式化,即创建文件系统
sudo mkfs.vfat /dev/sdb1
sudo mkfs.ext4 /dev/sdb2
4.对分区创建卷标,对应window的C\D等盘符
sudo fatlabel /dev/sdb1 BOOT
sudo e2label /dev/sdb2 ROOT
5.创建2个文件夹,分别挂载分区到主机
sudo mkdir /mnt/BOOT
sudo mkdir /mnt/ROOT
sudo mount /dev/sdb1 /mnt/BOOT
sudo mount /dev/sdb2 /mnt/ROOT
查询分区UUID
每个分区都对应有一个UUID,可以通过blkid查看,由于这里会移植rootfs,移植的文件中会带有分区的静态信息(/etc/fstab),启动的时候系统会读取该文件并相应的挂载各个目录,如果说创建的分区的UUID和rootfs的不对应,会导致起不来。
sudo blkid
- BOOT - PARTUUID=caa6cd92-01
- ROOT - PARTUUID=caa6cd92-02
Bootloader
下载bootloader文件并copy到BOOT分区,github国内较慢,也可以直接gitee
git clone https://github.com/raspberrypi/firmware.git
或者
git clone https://gitee.com/KisChang/raspberrypi_firmware.git
把firmware文件夹中的boot所有文件copy到BOOT分区:
sudo cp -r firmware/boot/* /mnt/BOOT/
系统系统后的console输出需要借助cmdline.txt文件,正常刷镜像后也是存在该文件的,现在需要手动创建,其中xxx为root分区的PARTUUID:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=xxx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
启动
启动后系统会有报错,[end Kernel panic] --not syncing: no working init found.xxx。
这里发生了panic,主要原因是找不到init进程,该文件存在于rootfs中,还没有移植rootfs的原因。
移植rootfs
上面步骤已经完成了bootloader移植的工作,接下来移植rootfs。
由于这里还没有用buildroot和yocto编译rootfs,需要借助NOOBS安装系统中的。
下载入口:https://downloads.raspberrypi.org/NOOBS/images/NOOBS-2022-04-07/NOOBS_v3_8_1.zip。
把下载好的rootfs.tar.xz复制到U盘的ROOT分区,并进行解压,由于文件较多,并且和U盘的性能有关系,解压过程比较耗时,本人的环境下1h左右。
sudo cp root.tar.xz /mnt/ROOT/
tar xvf root.tar.xz
开机
解压完成后插到开发板上启动,正常情况下会报错:Cannot open access to console, the root account is locked,是由于rootfs中的/etc/fstab分区信息和手动创建PARTUUID不对应,需要进行修改。
编辑/etc/fstab,按照blkid中获取到的PARTUUID进行修改,在VM中进行编辑:vim /etc/fstab:
proc /proc proc defaults 0 0
PARTUUID=caa6cd92-01 /boot vfat defaults 0 2
PARTUUID=caa6cd92-02 / ext4 defaults,noatime 0 1
编辑完后即可重启完成。
猜你喜欢
- 2024-10-23 基于S12 MagniV系列的LIN Bootloader设计
- 2024-10-23 怎么使用USBasp给arduino烧写bootloader?
- 2024-10-23 腾讯 ROG 游戏手机 6 / Pro 公开内核源码并支持解锁 bootloader
- 2024-10-23 浅谈基于uds的bootloader设计(简要概述u-boot的主要功能)
- 2024-10-23 Bootloader引导程序uboot(bootice 引导)
- 2024-10-23 基于CAN总线的Bootloader设计与实现
- 2024-10-23 Rust语言开发操作系统-第二章(最小化内核)
- 2024-10-23 基于RT-Thread完整版搭建的极简Bootloader
- 2024-10-23 海信阅读手机A9现可解锁bootloader并获取root权限
- 2024-10-23 三星警告Galaxy Z Fold 3解锁bootloader将失去相机功能
你 发表评论:
欢迎- 最近发表
-
- linux日志文件的管理、备份及日志服务器的搭建
- Linux下挂载windows的共享目录操作方法
- Linux系统中的备份文件命令(linux系统中的备份文件命令有哪些)
- 麒麟KYLINOS|通过不同方法设置用户访问文件及目录权限
- 「Linux笔记」系统目录结构(linux目录的结构及含义)
- linux中修改归属权chown命令和chgrp命令
- 工作日报 2021.10.27 Android-SEAndroid权限问题指南
- Windows和Linux环境下,修改Ollama的模型默认保存路径
- 如何强制用户在 Linux 上下次登录时更改密码?
- 如何删除Linux文件夹中除某些扩展名之外的所有文件?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)