经过两天的测试和完善,现在基本已经正常可用了。
(全自动是假,接近全自动吧。)
需要使用配测电脑的网络功能,windows即可,脱离linux虚拟机。(理论上讲u盘也是可以的)
测试平台:龙芯2k1000
接口:串口,网口(可用U盘取代吧)。
windows上的软件:tftpd32,ftpserver,securecrt(主要是串口)
windows有线网口连接设备,windows主机配置静态ip:192.168.0.10(必须是这个,因为脚本设置的是这个ip,否则需要修改脚本)
软件镜像:gzrom-dtb-update-linux.bin 用于自动升级
vmlinuz-ramdisk linux内核,并且包含ramdisk,参考118.龙芯2k1000-pmon(17)-制作ramdisk-CSDN博客
rootfs_hd43.tar.bz2(1GB左右) 麒麟文件系统,自行打包自己的文件系统即可,注意文件名应该是这个名字,否则需要修改脚本
一、简单描述一下整个过程
1.1 pmon 自动下载电脑主机中的 vmlinuz-ramdisk 并且使用该内核启动,
1.2 pmon 指定启动参数,使用ramdisk文件系统启动。
g 'console=ttyS0,115200 root=/dev/ram0 rdinit=/linuxrc'
或者设置环境变量 set append 'console=ttyS0,115200 root=/dev/ram0 rdinit=/linuxrc'
1.3 pmon 启动该内核和ramdisk,重点就在这个ramdisk的脚本中,文件系统启动后,启动自动安装脚本,进行以下流程安装:
1.3.1 分区/dev/sda ,我这里分两个区,第一个2g,之后的是第二个分区,默认有117g
1.3.2 格式化每个分区,第一个分区,vfat格式,第二个分区ext4格式
1.3.3 挂载两个分区到mnt目录下的mnt_sda1 和mnt_sda2
1.3.4 从windows下载vmlinuz-ramdisk和rootfs_hd43.tar.bz2 到mnt_sda1 目录下。
1.3.5 解压rootfs_hd43.tar.bz2 到mnt_sda2 目录下
1.3.6 设置pmon的启动参数append,修改文件系统为sda2分区启动
set append "console=ttyS0,115200 noinitrd root=/dev/sda2 rootfstype=ext4 rootwait rw"
这里实际是要修改pmon的flash区域,所以直接参考这个
1.3.7 重启,因为我这个设备没法使用reboot命令,就只能手动断电在启动了。
断电重启后,启动成功:
第一次启动的时候,app(qt)启动有点慢,后面应该就好了。
二、涉及的脚本
我这些脚本都在/home/dazhi目录下,包括修改env的程序
脚本在文末的压缩包中有,/home/dazhi目录下
2.1 设置开机自启 rc.lccal 直接启动install_linux.sh
2.2 install_linux.sh 内容
echo "hello 2024,ready to install new linux system now"
echo "hello 2024,ready to install new linux system now" > /dev/tty0
n=`mount | grep mnt_sda1 | wc -l`
echo "n=" $n
if [ $n -eq 1 ] ;then
cd /
umount /mnt/mnt_sda1
fi
n=`mount | grep mnt_sda2 | wc -l`
if [ $n -eq 1 ] ;then
cd /
umount /mnt/mnt_sda2
fi
echo "1. format disk now !!"
echo "1. format disk now !!" > /dev/tty0
/home/dazhi/partdisk.sh
echo "2. format done!!"
echo "2. format done!!" > /dev/tty0
echo "3. install rootfs system"
echo "3. install rootfs system" > /dev/tty0
/home/dazhi/install_rootfs.sh
echo "4. install rootfs system done !!!!"
echo "4. install rootfs system done !!!!" > /dev/tty0
exit 0
2.3 partdisk.sh 用于分区
前面有一段是删除分区,实际没有4个,也就是执行一下,没有影响,能正常通过。
#!/bin/bash
echo "part disk /dev/sda to two parts,20240311 by dazhi"
PARTDISK="/dev/sda"
echo '
d
1
d
2
n
p
1
+2048M
n
p
2
w' | fdisk $PARTDISK &> /dev/null
partprobe $PARTDISK
sync
sleep 2
mkfs.fat ${PARTDISK}1 &> /dev/null
mkfs.ext4 ${PARTDISK}2 &> /dev/null
echo "part disk done,enjoy!!!"
fdisk -l
exit 0
2.4 install_rootfs.sh
主要就是解压该文件系统到sda2了。解压的时间有点长。需要耐心等一下。
#!/bin/bash
echo "3.1.start to install rootfs to sda2"
echo "3.1.start to install rootfs to sda2" > /dev/tty0
n=`mount | grep mnt_sda1 | wc -l`
echo "n=" $n
if [ $n -eq 1 ] ;then
cd /
umount /mnt/mnt_sda1
fi
n=`mount | grep mnt_sda2 | wc -l`
if [ $n -eq 1 ] ;then
cd /
umount /mnt/mnt_sda2
fi
i=1
while [ $i -le 10 ]
do
mount /dev/sda1 /mnt/mnt_sda1
if [ $? -eq 0 ] ; then
break
fi
sleep 1
let i++
echo "= $?"
echo "Retry: mount /dev/sda1 /mnt/mnt_sda1"
done
if [ $i -ge 10 ];then
echo "ERROR: mount /dev/sda1 /mnt/mnt_sda1"
echo "ERROR: mount /dev/sda1 /mnt/mnt_sda1" > /dev/tty0
exit 1
fi
i=1
while [ $i -le 10 ]
do
mount -t ext4 /dev/sda2 /mnt/mnt_sda2
if [ $? -eq 0 ] ; then
break
fi
sleep 1
let i++
echo "Retry: mount /dev/sda2 /mnt/mnt_sda2"
done
if [ $i -ge 10 ];then
echo "ERROR: mount /dev/sda2 /mnt/mnt_sda2"
echo "ERROR: mount /dev/sda2 /mnt/mnt_sda2" > /dev/tty0
exit 1
fi
echo "3.2.download vmlinuz-ramdisk from tftp (serverip 192.168.0.10) now !!!"
echo "3.2.download vmlinuz-ramdisk from tftp (serverip 192.168.0.10) now !!!" > /dev/tty0
#cd /mnt/mnt_sda1
#tftp -g -r vmlinuz-ramdisk 192.168.0.10
#cd -
sleep 2
echo "3.3ftpget vmlinuz-ramdisk now !!!"
echo "3.3ftpget vmlinuz-ramdisk now !!!" > /dev/tty0
ftpget -u ftp -p ftp 192.168.0.10 /mnt/mnt_sda1/vmlinuz-ramdisk vmlinuz-ramdisk
if [ $? -ne 0 ];then
echo "ERROR: ftpget vmlinuz-ramdisk"
echo "ERROR: ftpget vmlinuz-ramdisk" > /dev/tty0
exit 1
fi
sleep 2
if [ ! -f /mnt/mnt_sda1/rootfs_hd43.tar.bz2 ] ; then
echo "The file /mnt/mnt/sda1/rootfs_hd43.tar.bz2 doesn't exist"
echo "need to download from tftp (serverip 192.168.0.10) now !!!"
#cd /mnt/mnt_sda1
#tftp -g -r rootfs_hd43.tar.bz2 192.168.0.10
#cd -
echo "ftpget rootfs_hd43.tar.bz2 now !!!"
echo "ftpget rootfs_hd43.tar.bz2 now !!!" > /dev/tty0
ftpget -u ftp -p ftp 192.168.0.10 /mnt/mnt_sda1/rootfs_hd43.tar.bz2 rootfs_hd43.tar.bz2
else
echo "The file /mnt/mnt/sda1/rootfs_hd43.tar.bz2 is exist"
echo "go on to next step"
fi
echo "3.4.ready to extract tar.bz2,wait for some times please!!!"
echo "3.4.ready to extract tar.bz2,wait for some times please!!!" > /dev/tty0
sync
sleep 2
tar xvf /mnt/mnt_sda1/rootfs_hd43.tar.bz2 -C /mnt/mnt_sda2/ --numeric-owner --strip-components 1
sync
echo "3.5.extract tar.bz2 done !!!"
echo "3.5.extract tar.bz2 done !!!" > /dev/tty0
sleep 5
i=1
while [ $i -le 10 ]
do
umount /mnt/mnt_sda1
if [ $? -eq 0 ] ; then
break
fi
sleep 1
let i++
done
if [ $i -ge 10 ];then
echo "ERROR: umount /mnt/mnt_sda1"
echo "ERROR: umount /mnt/mnt_sda1" > /dev/tty0
exit 1
fi
echo "3.6.install rootfs done"
echo "3.6.install rootfs done" > /dev/tty0
ls /mnt/mnt_sda2/
i=1
while [ $i -le 10 ]
do
umount /mnt/mnt_sda2
if [ $? -eq 0 ] ; then
break
fi
sleep 1
let i++
done
if [ $i -ge 10 ];then
echo "ERROR: umount /mnt/mnt_sda2"
echo "ERROR: umount /mnt/mnt_sda2" > /dev/tty0
exit 1
fi
echo "3.7. set start evn"
echo "3.7. set start evn" > /dev/tty0
/home/dazhi/program_pmon_ls2k1000 -e /home/dazhi/normal_env.bin
echo "3.8.need reboot now in manual !!!"
echo "3.8.need reboot now in manual !!!" > /dev/tty0
exit 0
三、pmon的部分
它主要还是设置环境变量:
3.1 al1 设置为tftp下载vmlinuz-ramdisk
3.2 append 'console=ttyS0,115200 root=/dev/ram0 rdinit=/linuxrc' 表示使用ramdisk启动。
这个部分全部在gzrom-dtb-update-linux.bin 中设置好了。
3.3 最后,文件系统解压完成之后,还要修改append的部分
由它完成: /home/dazhi/program_pmon_ls2k1000 -e /home/dazhi/normal_env.bin
就是把append再次还原
append "console=ttyS0,115200 noinitrd root=/dev/sda2 rootfstype=ext4 rootwait rw"
再次启动,就会引导硬盘中的文件系统了。
四、ramdisk文件系统的压缩包:
链接: https://pan.baidu.com/s/1PEsAFco7anIuoAIV1Ll9vA?pwd=febk 提取码: febk