119.龙芯2k1000-pmon(18)-全自动安装linux系统

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/451000.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JDBC底层原理

1、什么是JBDC? JBDC(Java Database Connectivity),JDBC只是一套规范接口,真正实现的是各数据库厂商驱动。 2、JBDC的底层的主要接口对象是什么? JBDC的底层主要是三个接口对象,Connection、Statement、ResultSet。Co…

C#实现二分查找算法

C#实现二分查找算法 以下是一个使用 C# 实现的二分查找算法示例&#xff1a; using System;class Program {static int BinarySearch(int[] arr, int target){int low 0;int high arr.Length - 1;while (low < high){int mid (low high) / 2;// 如果目标值等于中间元素…

javaEE6(网站第3章-jsp练习中三个例题动手做一遍;课后题2(1),(2))

两个数求和 用javascript实现。 输入、处理、输出用同一个页面(自己处理自己)。 输入1.jsp&#xff0c;处理和输出2.jsp。 &#xff08;4&#xff09;输入1.jsp&#xff0c;处理2.jsp&#xff0c;处理完转回1.jsp显示结果。 &#xff08;5&#xff09;输入1.jsp&#xff0c;处…

Python: 如何绘制核密度散点图和箱线图?

01 数据样式 这是数据样式&#xff1a; 要求&#xff08;我就懒得再复述一遍了&#xff0c;直接贴图&#xff09;&#xff1a; Note&#xff1a;数据中存在无效值NA&#xff08;包括后续的DEM&#xff09;&#xff0c;需要注意 02 提取DEM 这里我就使用gdal去提取一下DEM列…

Mixamo动画素材导入UE5的最简单方法

一、Mixamo素材 官网&#xff1a;https://www.mixamo.com/ Mixamo是Adobe公司出品的免费动画库&#xff0c;可商用。软件分为characters(角色&#xff09;、Animations&#xff08;动画)两个部分。 二、辅助工具MIXAMO CONVERTER 官网&#xff1a;https://terribilisstudio…

海外媒体发稿:新闻媒体发稿7种方法-华媒舍

新闻报道媒体发稿营销推广是当代企业形象宣传的重要手段之一&#xff0c;合理推广可以提升品牌知名度、吸引住潜在用户。在这篇文章中&#xff0c;我们将要详细介绍七种科学合理的形式&#xff0c;帮助你完全把握新闻报道媒体发稿营销推广。 1.明确目标群体明确目标群体是实现推…

阅读欣赏推荐之(三)——纪录片《地平线系列:大数据时代》

现今的我们正处于一个时代转型中&#xff0c;因为科技的发展与互联网的日益强大&#xff0c;数据将逐步取代旧事物&#xff0c;创造出新事物。当今社会以一种前所未有的方式&#xff0c;通过对海量数据进行分析&#xff0c;获得巨大价值的产品和服务&#xff0c;或深刻的洞见。…

SSM整合项目(显示+添加+修改家居)

文章目录 1.显示全部家居1.需求分析2.思路分析3.编写Service层1.FurnService.java 添加方法2.FurnServiceImpl.java 实现方法3.单元测试 4.编写Controller层1.FurnController.java 添加方法2.postman完成测试 5.前端展示家居1.HomeView.vue 修改el-table使其prop跟Furn的属性名…

PLC远程故障诊断

随着工业自动化水平的不断提升&#xff0c;可编程逻辑控制器&#xff08;PLC&#xff09;在生产线控制、设备自动化等领域发挥着越来越重要的作用。然而&#xff0c;PLC在运行过程中难免会出现故障&#xff0c;影响生产线的稳定运行。因此&#xff0c;如何迅速、准确地诊断并解…

有c语言基础,如何快速学会C++核心知识?

有c语言基础&#xff0c;如何快速学会C核心知识&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提…

Python deepFM推荐系统,推荐算法,deepFM源码实战,deepFM代码模板

1.DeepFM介绍&#xff1a; DeepFM&#xff08;Deep Factorization Machine&#xff09;是一种结合了深度学习和因子分解机的推荐模型。它在CTR&#xff08;点击率&#xff09;预测任务中表现出色&#xff0c;并能够有效地处理稀疏特征。 DeepFM模型由两个部分组成&#xff1a;因…

截断表

oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 截断表 事务处理本身是保护数据完整性的一个手段&#xff0c;但是在使用事务处理的过程之中需要注意一点 在用户更新数据后还未进行事务提交时&#xff0c;如果发生了 DDL…

1688 API接口在数据分析与营销决策中的应用探索

在当今数字化快速发展的时代&#xff0c;数据分析与营销决策已成为企业运营中不可或缺的重要环节。而1688 API接口&#xff0c;作为阿里巴巴旗下的一个强大的数据交互平台&#xff0c;为企业在数据分析与营销决策方面提供了丰富的数据源和灵活的操作方式。本文将深入探讨1688 A…

https代理相对socks5代理有什么优势?

随着互联网的快速发展&#xff0c;代理服务已成为许多人在访问敏感或地理位置受限的网站时所依赖的工具。其中&#xff0c;HTTPS代理和SOCKS5代理是两种最常用的代理服务类型。本文将探讨HTTPS代理相对SOCKS5代理的优势。 1、安全性 HTTPS代理使用SSL/TLS协议对客户端和代理服…

RabbitMQ - 01 - 快速入门

目录 界面总览 创建队列 选择默认交换机 发布消息 查看消息 通过实现以下目标快速入门 界面总览 RabbitMQ Management 界面总览 通道: 传输消息的通道 路由: 接收和路由(分发)消息 队列: 存储消息 消息队列的流程: 生产者将消息发送给路由,路由分发消息到各个队列存储…

Android Kotlin知识汇总(四)Kotlin 协程实践

Kotlin的重要优势及特点之——结构化并发 Kotlin 协程是一种并发设计模式&#xff0c;可以在 Android 平台上让异步代码像阻塞代码一样易于使用。协程可大幅简化后台任务管理&#xff0c;例如网络调用、本地数据访问等任务的管理。 简单来说&#xff0c;协程就是一种轻量级的非…

Windows从0到1部署项目

文章目录 1.创建虚拟机2.文件的传输--共享文件夹共享文件夹的访问 3.安装jdk&#xff0c;Tomcat3.1jdk的安装与配置配置环境变量 3.2Tomcat的安装与配置 4.安装mysql数据库5.下载nginx6.虚拟域名 因为Windows项目部署有很多操作都是博主之前做过的了&#xff0c;所及就只放了博…

何恺明教授在MIT的第一课,双语字幕1080P看resnet作者亲自讲解resnet

这几天AI圈最火的话题莫过于何恺明大神在MIT的首场教学了 何恺明&#xff08;Kaiming He&#xff09;教授于3月7日走上讲台&#xff0c;完成了他在麻省理工学院的首场教学&#xff0c;这标志着他教学生涯中的一个重要时刻。作为麻省理工学院电气工程与计算机科学系&#xff08…

批处理自动找木马文件路径

背景&#xff1a;如果主机不多&#xff0c;应急有通报的木马病毒样本可能存在的路径&#xff0c;一个个翻就太累。 直接整成一个文档&#xff0c;如果存在那个可以着重主机了。当然木马查杀记录也不能忘记看下。 1. 双击打开 cmd.bat 2. 输入list.bat 3. 文件存在输出路径…

SQLiteC/C++接口详细介绍之sqlite3类(四)

上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;三&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;五&#xff09;&#xff08;暂未发表&#xff09; 编写不易&#xff0c;有用的朋友点个赞或加粉一下万分感谢&#xff01;300…