任务动机:根据openEuler社区任务要求,制作可运行在Firefly-RK-3399上的openEuler镜像。
任务描述:开发完成后,总结制作步骤形成文档。
1. 制作rootfs镜像
1.1 安装openEuler到树莓派
参考https://gitee.com/openeuler/raspberrypi
1.2 构建rootfs
确保树莓派与本地在同一局域网内:(树莓派通过网线与本地机连到同一路由器)
(1)查看ip地址
(2)ssh连接
ssh root@192.168.15.71
(3)树莓派连接wifi(可不操作)
获取无线网卡 wlan0信息
ip a
扫描可以连接的 wifi 信息
nmcli dev wifi
连接wifi
nmcli dev wifi connect 1106 password *********
(4)创建 RPM 数据库
mkdir rootfs
mkdir -p rootfs/var/lib/rpm
rpm --root /rootfs/ --initdb
(5)下载安装 openEuler 发布包
rpm -ivh --nodeps --root /root/rootfs/ http://repo.openeuler.org/openEuler-20.03-LTS/everything/aarch64/Packages/openEuler-release-20.03LTS-33.oe1.aarch64.rpm
在/root/rootfs下生成3个文件夹:
(6)添加 yum 源
mkdir /root/rootfs/etc/yum.repos.d
curl -o /root/rootfs/etc/yum.repos.d/openEuler-20.03-LTS.repo https://gitee.com/src-openeuler/openEuler-repos/raw/openEuler-20.03-LTS/generic.repo
(7)安装dnf
dnf --installroot=/root/rootfs/ install dnf --nogpgcheck -y(多执行几次)
(8)安装必要软件
dnf --installroot=/root/rootfs/ makecache
dnf --installroot=/root/rootfs/ install -y alsa-utils wpa_supplicant vim net-tools iproute iputils NetworkManager openssh-server passwd hostname ntp bluez pulseaudio-module-bluetooth
(9)添加配置文件
-
设置 DNS
cp -L /etc/resolv.conf ${WORKDIR}/rootfs/etc/resolv.conf
编辑添加 nameserver
vim ${WORKDIR}/rootfs/etc/resolv.conf
内容:
nameserver 8.8.8.8 nameserver 114.114.114.114
2. 设置 IP 自动获取
mkdir ${WORKDIR}/rootfs/etc/sysconfig/network-scripts
vim ${WORKDIR}/rootfs/etc/sysconfig/network-scripts/ifup-eth0
内容:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=eth0
UUID=851a6f36-e65c-3a43-8f4a-78fd0fc09dc9
ONBOOT=yes
AUTOCONNECT_PRIORITY=-999
DEVICE=eth0
(10)rootfs设置
1. 挂载必要的路径
mount --bind /dev ${WORKDIR}/rootfs/dev
mount -t proc /proc ${WORKDIR}/rootfs/proc
mount -t sysfs /sys ${WORKDIR}/rootfs/sys
2. run chroot
chroot ${WORKDIR}/rootfs /bin/bash
3. 设置root密码
passwd root
输入要设置的root密码。
4. 设置主机名
echo openEuler > /etc/hostname
5. 设置默认时区为东八区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
6. 退出
exit
7. 取消临时挂载的目录
umount -l ${WORKDIR}/rootfs/dev
umount -l ${WORKDIR}/rootfs/proc
umount -l ${WORKDIR}/rootfs/sys
(11)制作镜像
1. dd创建镜像
dd if=/dev/zero of=rootfs.img bs=1M count=3000
2. 格式化镜像
mkfs.ext4 rootfs.img
3. 挂载镜像
mkdir rootfsimg
mount rootfs.img rootfsimg/
cp -rfp rootfs/* rootfsimg/
4. 卸载镜像
umount rootfsimg/
5. 镜像压缩
e2fsck -p -f rootfs.img
resize2fs -M rootfs.img
6. 镜像传到本地
退出树莓派的ssh连接,切换到本地
scp root@192.168.15.71:/root/rootfs.img /home/wzq/rootfsimg
2. 准备openEuler镜像刷写环境
环境:Windows;AndroidTool2.58
(1)工具
AndroidTool2.58可以在官网直接下载工具,如果下载过RK3399镜像,那么在镜像的解压文件里也有。
(2)文件
在rockdev文件夹中新建文件夹“image”
将刚才制作的rootfs.img及RK3399需要的固件放在image文件夹下(其他文件可通过解包ubuntu18.04的镜像获得)
mkupdate.bat文件(rockdev文件夹下)
mklink /J Image ..\..\..\..\rockdev
Afptool -pack ./ Image\update.img
RKImageMaker.exe -RK330C Image\MiniLoaderAll.bin Image\update.img update.img -os_type:androidos
rem update.img is new format, Image\update.img is old format, so delete older format
del Image\update.img
pause
package-file文件(rockdev文件夹下)
# NAME Relative path
#
#HWDEF HWDEF
package-file package-file
bootloader Image/MiniLoaderAll.bin
parameter Image/parameter.txt
trust Image/trust.img
uboot Image/uboot.img
boot Image/boot.img
misc Image/misc.img
recovery Image/recovery.img
rootfs:grow Image/rootfs.img
backup RESERVED
3. 制作openEuler镜像
双击运行mkupdate.bat文件
rootfs.img较其他文件大,需要稍微等一下
完成之后会在rockdev文件夹中生成update.img
4. 烧写镜像
(1)打开AndroidTool.exe工具,设备进入loader模式
按住recovery,按一下reset,工具显示进入loader模式之后,松开recovery,大约2s
(2)选择生成的update.img,升级固件(固件加载需要一会时间)
注:关于AndroidTool.exe的使用可参考官方说明:http://www.t-firefly.com/product/rk3399.html