经过两天的测试和完善,现在基本已经正常可用了。

(全自动是假,接近全自动吧。)

需要使用配测电脑的网络功能,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

                 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命令,就只能手动断电在启动了。

麒麟系统 java 开机启动_linux

断电重启后,启动成功:

麒麟系统 java 开机启动_ls2k1000_02

第一次启动的时候,app(qt)启动有点慢,后面应该就好了。

二、涉及的脚本

我这些脚本都在/home/dazhi目录下,包括修改env的程序

脚本在文末的压缩包中有,/home/dazhi目录下

2.1  设置开机自启 rc.lccal 直接启动install_linux.sh

麒麟系统 java 开机启动_麒麟系统 java 开机启动_03

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 中设置好了。

麒麟系统 java 开机启动_ls2k1000_04

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