github上找 海思SDK,这里以HiSTBLinuxV100R005C00SPC060为例。
1、编译hiboot
uboot引导文件、uboot引导参数配置
编译环境,以ubuntu为例
apt-get install gcc make gettext bison flex bc zlib1g-dev libncurses5-dev lzma cd HiSTBLinuxV100R005C00SPC060 source ./env.sh
cp configs/hi3798mv100/hi3798mdmo1g_hi3798mv100_cfg.mak ./cfg.mak make menuconfig make hiboot
2、设计eMMC分区,编译bootargs
修改分区大小,调整分区大小,需同步修改bootargs.txt 和 emmc_partitions.xml
bootcmd=mmc read 0 0x1FFFFC0 0x1000 0x5000;bootm 0x1FFFFC0 bootargs=console=ttyAMA0,115200 root=/dev/mmcblk0p6 rootfstype=ext4 rootwait blkdevparts=mmcblk0:1M(fastboot),1M(bootargs),10M(kernel),256M(rootfs),700M(backup),-(ubuntu)
bootcmd说明:从第0个mmc设备块上2M字节处开始(0x1000的十进制2M),读取(0x5000的十进制10M,即第三分区的hi_kernel)到内存0x1FFFFC0处,并从此处引导。
当需要开机进入恢复系统时,读取第四分区为根目录,则root=/dev/mmcblk0p4
修改configs/hi3798mv100/prebuilts/emmc_bootargs.txt,
make prebuilts
会重新生成引导文件 bootargs.bin
3,编译内核
cd source/kernel/linux-4.4.y/ make ARCH=arm hi3798mv100_defconfig make ARCH=arm menuconfig cp .config ../linux-4.4.y.path/arch/arm/configs/hi3798mv100_defconfig make distclean cd HiSTBLinuxV100R005C00SPC060 make linux
4.配置rootfs分区的网络
解压source/rootfs/scripts/rootfs.tar.bz2
修改etc/init.d/S80network文档
ipaddr=192.168.1.10 bootp= gateway=192.168.1.1 netmask=255.255.255.0 hostname=huawei-ec6108v9 netdev=eth0 autoconf=
打包回去。然后编译make build -j1
注意,rootfs分区是一个微型的busybox系统,用来做恢复第6分区用。
5.制作第5分区做backup的备份存储backup.img
dd if=/dev/zero of=backup.img bs=1024 count=700 mkfs.ext4 backup.img mount backup.img /mnt cp ubuntu-20-04-rootfs.img /mnt/ umount /mnt/
虽然有点绕:必要时你就可以操作第4分区的busybox系统将第5分区的ubuntu-20-04-rootfs.img恢复到第6分区。
6.两个系统busybox和ubuntu之间来回切换。
制作好两个bootargs.bin
一个读取根目录root=/dev/mmcblk0p4
一个读取根目录root=/dev/mmcblk0p6
命名为bootargs4.bin,bootargs6.bin
例如在ubuntu下要进入busybox微型系统
dd if=bootargs4.bin of=/dev/mmcblk0p2 bs=1024 count=1024 //相反 dd if=bootargs6.bin of=/dev/mmcblk0p2 bs=1024 count=1024
其实就是第2分区的bootargs的bootcmd参数改变系统根目录引导走向。