后面想使用和yocto来构建 os。这里用手动的方式来移植和,通过这种方式和自动化方式做对比,更能突出后者的优势。
系统从上电到界面显示大致的流程如下,其中必备的3个阶段:、和。是内嵌在CPU或者GPU中的,开发者无法进行修改。
系统启动过程
在这里通过移植和,对该启动过程有更深入的了解。
环境:
U盘格式化
默认是支持U盘启动的,启动前需要进行格式化,创建2个分区,ROOT和BOOT。
步骤如下:
1.查看U盘设备:fdisk -l
U盘设备信息
2.通过命令对其进行格式化并创建2个分区:
sudo umount /dev/sdb1
sudo parted -s /dev/sdb mklabel msdos mkpart primary fat32 1M 100M mkpart primary ext4 100M 100%
查看结果是否成功:lsblk
查看是否有2个分区
3.对创建的分区进行格式化,即创建文件系统
sudo mkfs.vfat /dev/sdb1
sudo mkfs.ext4 /dev/sdb2
4.对分区创建卷标,对应的CD等盘符
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查看,由于这里会移植,移植的文件中会带有分区的静态信息(/etc/fstab),启动的时候系统会读取该文件并相应的挂载各个目录,如果说创建的分区的UUID和的不对应,会导致起不来。
sudo blkid
blkid信息
下载文件并copy到BOOT分区,国内较慢,也可以直接gitee
git clone https://github.com/raspberrypi/firmware.git
或者
git clone https://gitee.com/KisChang/raspberrypi_firmware.git
把文件夹中的boot所有文件copy到BOOT分区:
sudo cp -r firmware/boot/* /mnt/BOOT/
系统系统后的输出需要借助.txt文件,正常刷镜像后也是存在该文件的,现在需要手动创建,其中xxx为root分区的:
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=PARTUUID=xxx rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
启动
启动后系统会有报错,[end panic] –not : no init found.xxx。
这里发生了panic,主要原因是找不到init进程,该文件存在于中,还没有移植的原因。
panic
移植
上面步骤已经完成了移植的工作,接下来移植。
由于这里还没有用和yocto编译,需要借助NOOBS安装系统中的。
下载入口:。
文件路径
把下载好的.tar.xz复制到U盘的ROOT分区,并进行解压,由于文件较多,并且和U盘的性能有关系,解压过程比较耗时,本人的环境下1h左右。
sudo cp root.tar.xz /mnt/ROOT/
tar xvf root.tar.xz
开机
解压完成后插到开发板上启动,正常情况下会报错: open to , the root is ,是由于中的/etc/fstab分区信息和手动创建不对应,需要进行修改。
失败
编辑/etc/fstab,按照blkid中获取到的进行修改,在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
编辑完后即可重启完成。
———END———
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,永久会员只需99元,全站资源免费下载 点击查看详情
站 长 微 信: hs105011