树莓派CM4(三): 定制自己的树莓派镜像
1. 镜像下载
- 使用树莓派最新的镜像Raspberry Pi OS Lite,内核版本6.6
- 下载链接
2. 挂载镜像到ubuntu
-
上一步下载的树莓派镜像
jun@ubuntu:$ ls 2024-07-04-raspios-bookworm-arm64-lite.img
-
查看第一个未使用的回环设备
jun@ubuntu:$ losetup -f /dev/loop0
-
将树莓派镜像关联到回环设备
jun@ubuntu:$ sudo losetup /dev/loop0 2024-07-04-raspios-bookworm-arm64-lite.img [sudo] password for jun:
-
查看分区,检测到两个区,其中较小的是系统分区,较大的是根文件系统
jun@ubuntu:$ sudo kpartx -av /dev/loop0 add map loop0p1 (253:0): 0 1048576 linear 7:0 8192 add map loop0p2 (253:1): 0 4481024 linear 7:0 1056768
-
创建系统分区挂载目录
jun@ubuntu:$ mkdir boot
-
创建根文件系统挂载目录
jun@ubuntu:$ mkdir rootfs
-
挂载系统分区
jun@ubuntu:$ sudo mount /dev/mapper/loop0p1 ./boot/
-
挂载根文件系统
jun@ubuntu:$ sudo mount /dev/mapper/loop0p2 ./rootfs/
-
查看系统分区
jun@ubuntu:ig210$ ls ./boot/ bcm2710-rpi-2-b.dtb bcm2710-rpi-zero-2-w.dtb bcm2711-rpi-cm4s.dtb bootcode.bin fixup4db.dat fixup_x.dat kernel8.img start4.elf start_x.elf bcm2710-rpi-3-b.dtb bcm2711-rpi-400.dtb bcm2712d0-rpi-5-b.dtb cmdline.txt fixup4x.dat initramfs_2712 LICENCE.broadcom start4x.elf bcm2710-rpi-3-b-plus.dtb bcm2711-rpi-4-b.dtb bcm2712-rpi-5-b.dtb config.txt fixup_cd.dat initramfs8 overlays start_cd.elf bcm2710-rpi-cm3.dtb bcm2711-rpi-cm4.dtb bcm2712-rpi-cm5-cm4io.dtb fixup4cd.dat fixup.dat issue.txt start4cd.elf start_db.elf bcm2710-rpi-zero-2.dtb bcm2711-rpi-cm4-io.dtb bcm2712-rpi-cm5-cm5io.dtb fixup4.dat fixup_db.dat kernel_2712.img start4db.elf start.elf
-
查看根文件系统
jun@ubuntu:ig210$ ls ./rootfs/ bin boot dev etc home lib lost+found media mnt opt proc root run sbin srv sys tmp usr var
3. 自定义系统配置
3.1 使能调试串口
- 修改系统分区下的
config.txt
$ cd boot/ boot$ sudo vi config.txt
- 在
config.txt
的末尾添加如下内容enable_uart=1
3.2 设置用户名密码
-
设置用户名为
jun
,密码为9
-
在一台已经进入终端的树莓派中执行如下命令,获取密码的密文,如下表示设置密码为
9
root@jun:/home/jun# echo 9 | openssl passwd -6 -stdin $6$tSX0UC/bRp.tzUvf$gqnju1u.BPjPLz1659xUok2GHViNBdcW7D4o4g4tf9xlbVFn4SU2EaV3/0Q02yquTkluWdZBi8sKrB0n3vtaC/
-
将用户名和密文拼接
jun:$6$tSX0UC/bRp.tzUvf$gqnju1u.BPjPLz1659xUok2GHViNBdcW7D4o4g4tf9xlbVFn4SU2EaV3/0Q02yquTkluWdZBi8sKrB0n3vtaC/
-
将上一步得到的拼接字符串写入到boot分区的
userconf.txt
文件中
3.3 设置主机名
-
修改根文件系统下的
hostname
,修改主机名为jun
sudo vi rootfs/etc/hostname
-
修改根文件系统下的
hosts
文件,将127.0.1.1
对应的主机名也修改为jun
3.4 开启SSH
-
在
boot
分区中创建一个空文件SSH
即可boot$ sudo touch SSH
3.5 使能IIC
-
修改
boot/config.txt
,取消dtparam=i2c_arm=on
的注释,添加dtparam=i2c_vc=on
-
修改
rootfs/etc/modules
,在其中添加一行i2c-dev
jun@ubuntu:$ sudo vi rootfs/etc/modules
3.6 使能SPI
- 修改
boot/config.txt
,取消#dtparam=spi=on
的注释,如果没有这一项,添加之
3.7 使能所有的串口
-
修改
boot/config.txt
,添加如下内容deoverlay=uart0,txd0_pin=14,rxd0_pin=15 dtoverlay=uart2,txd2_pin=0,rxd2_pin=1 dtoverlay=uart3,txd3_pin=4,rxd3_pin=5 dtoverlay=uart4,txd4_pin=8,rxd4_pin=9 dtoverlay=uart5,txd5_pin_12,rxd5_pin=13
3.8 添加Logo
- 在用户登录时显示Logo
- 使用
figlet
这个工具可以生成点线图
- 在
rootfs/etc/profile
文件末尾添加echo
指令,打印点线图Logojun@ubuntu:rootfs$ sudo vi etc/profile
echo -e "\033[0;32m _____ _____ ____ _____ |_ _| | ____| / ___| |_ _| | | | _| \___ \ | | | | | |___ ___) | | | |_| |_____| |____/ |_| \033[0m\n"
4. 取消挂载镜像
jun@ubuntu:$ ls
2024-07-04-raspios-bookworm-arm64-lite.img boot rootfs
jun@ubuntu:$ sudo umount ./boot
jun@ubuntu:$ sudo umount ./rootfs
jun@ubuntu:$ sudo losetup -d /dev/loop0