首页 > 其他分享 >03_系统移植入门

03_系统移植入门

时间:2023-12-14 15:23:54浏览次数:37  
标签:03 入门 启动 文件系统 init 内核 tftp 环境变量 移植

03_系统移植入门

  • 移植的基本步骤
    • 确定目标机、主机的连接方式 (已完成)
    • 安装交叉编译器(已完成)
    • 搭建主机-目标及数据传输通道(已完成)
    • 编译三大子系统
    • 烧写测试

uboot常用命令

https://blog.csdn.net/conjimmy/article/details/128693548

setenv、seveenv

设置环境变量

例如
set abc 100 200 第一个是变量名,后面都是变量值
后面如果什么都不跟,就是删除环境变量

这些变量都是存在 内存里的一小块空间

要把环境变量保存(把环境变量从内存拷贝到flash中),就需要使用saveenv指令

网络环境相关的信息

  • ipaddr
    • set ipaddr 192.168.1.160

nand

  • nand [动词] [内存地址] [flash内部地址] [搬移大小]
    • erase
    • write
    • read

把nand flash中5M空间读到内存21000000,1k大小

nand read 21000000 500000 1024

tftp

C:开发板
S:虚拟机

PC上提前开启tftp服务器
分为windows和linux
windows下一个tftp软件即可
linux上指令安装
sudo apt-get install tftpd openbsc-xinetd

具体设置网络上搜索


然后开发板上uboot下
输入tftp [内存地址] 文件
例如:tftp 20008000 a.txt
会把服务器上的a.txt的文件里的数据,拷贝到0x20008000的内存处

bootm

启动uImage

go

uImage
zImage Image bzImage

这些都是我们常见的内核文件

我们把内核文件下载到内存中

tftp 20008000 uImage

然后使用go指令跳转到这个内存地址
go 20008000 开始执行linux内核

结果是启动不了的

因为内核需要有启动条件

内核启动条件

其实就是环境变量 bootargs
root 启动的跟文件系统在那个设备中
设备信息 RAM NFS Flash
init 内核启动后,第一个可执行文件,也就是init进程从哪里来
console 内核启动时,使用那个设备作为控制台

例如:
1、设置环境变量
setenv bootargs root=/dev/mtdblock2 init=/linuxrc console=ttySAC0,115200
2、保存环境变量
saveenv

启动完了之后,我们的文件系统还没有挂载,导致我们的根文件系统没有,所以用户没法交互

文件系统的烧写

这个文件系统可以是各种介质,例如
内存RAM ramdisk
Nand flash
网络等等,都是可以的

  • 修改启动参数

root=/dev/ram
initrd=0x21000000,8M
内核从ramdisk启动文件系统,起始地址0x21000000,大小8M

init=/linuxrc
console=ttySAC0

  • 提前将内核和根文件系统拷贝到ramdisk上

20008000 uImage

tftp 20008000 uImage

21000000 根文件系统文件 initrd.img.gz

tftp 21000000 initrd.img.gz

  • 设置启动参数

setenv bootargs root=/dev/ram initrd=0x21000000,8M init=/linuxrc console=ttySAC0,115200

  • 启动内核

bootm 20008000

挂载网络文件系统 NFS

方便驱动开发

在驱动开发的时候,我们需要频繁的修改一些驱动文件,如果在虚拟机上修改,然后再拷贝到开发板上,会十分麻烦,所以我们选择把虚拟机上的一部分空间挂载为开发板的文件系统

  • PC上安装nfs服务

sudop apt-cache search nfs- 搜索nfs服务

sudo apt-get install nfs-kernel-server 安装nfs服务

配置:vim /etc/exports

里面添加

共享目录/home/rocky/work/rootfs

启动服务

sudo /etc/init.d/nfs-kernel-server restart

把前面的根文件系统文件解压一下gunzip initrd.img.gz 得到initrd.img

然后挂载到当前目录下的swap文件夹下

sudo mount -t ext2 initrd.img ./swap/

然后进入到这个目录下,就会发现有linux的根文件目录,把这些全部拷贝到我们之前设置的共享目录

sudo cp -a /home/rockey/tftpboot/swap /home/rocky/work/rootfs

至此,服务端的所有工作已经做完

  • 开发板上设置启动参数,挂在我们的虚拟机文件系统

setenv bootargs root=/dev/nfs nfsroot=192.168.10.110:/home/rocky/work/rootfs ip=192.168.10.122 init=/linuxrc console=ttySAC0,115200

启动bootm 0x20008000

自动运行

设置uboot自动启动内核

bootdelay
bootcmd

标签:03,入门,启动,文件系统,init,内核,tftp,环境变量,移植
From: https://www.cnblogs.com/staraire/p/17901235.html

相关文章

  • Istio从入门到精通—— 流量治理的原理 —— VirutalService —— HTTPRouteDestinati
     流量治理的原理——VirutalService——HTTPRouteDestinationhttps://istio.io/latest/docs/reference/config/networking/virtual-service/#HTTPRouteDestination Eachroutingruleisassociatedwithoneormoreserviceversions(seeglossaryinbeginning......
  • MySQL运维4-Mycat入门
    一、mycat概述mycat是阿里巴巴企业下的开源的,基于JAVA语言编写的MySQL数据库中间件,可以像使用MySQL一样来使用Mycat,对于开发人员来说根本感觉不到mycat的存在。之前在国内使用数据库分库分表,读写分离最主流的就是使用mycat,但是截止到今日2023-12-13日,mycat的网站的下载链接......
  • 03C# 从命令行或环境变量读取配置
    前面几篇文章主要讲解读取Json文件,这篇文章讲解如何通过命令行和环境变量读取配置安装Nuget包:Micosoft.Extensions.Configuration.CommandLine(命令行读取)安装Nuget包:Micosoft.Extensions.Configuration.EnvironmentVariables(环境变量读取)配置命令行参数: 配置环境变量参......
  • 零基础 从 yolo8 入门计算机视觉超简单:物体识别、图像分类、轨迹追踪、姿势识别
    目录安装Ultralytics训练模型验证预测&识别导出追踪图像分割提取分类姿势识别轨迹生成UltralyticsYOLOv8是备受好评的实时目标检测和图像分割模型,主要功能是物体识别、分割图片物体、分类、姿态识别和跟踪等。Ultralytics支持使用CPU、GPU进行训练,支持x64、arm64等CPU......
  • 【SpringBootWeb入门-12】MySQL-DDL-图形化工具
    1、章节前言上一篇文章我们讲解了MySQL的安装与配置,以及相关sql命令的执行操作,在演示这些sql语句的时候,我们都是在命令行当中进行操作的,在命令行当中敲写语句很不方便,主要原因有以下几点:无提示:命令行当中输入任何sql语句没有任何提示,全凭记忆,而且很容易敲错代码;操作繁琐:全部的......
  • Java从入门到放弃(知识体系图谱)
    一、Java学习路线话不多说,先来一张劝退图!!!二、Java并发学习路线下面是一张关于Java并发编程的思维导图,大的方向可以分为三个部分:线程基础、理论基础、工具类JUC三、Java虚拟机一张关于JVM的思维导图,大的方向可以分为三个部分:字节码与类的加载、内存与垃圾回收、性能监......
  • Cannot resolve symbol 'Resource'
    扩展JSR-250注解@Resource理解JSR系列注解JSR(JavaSpecificationRequests)是Java平台标准化进程中的一种技术规范,而JSR注解是其中一部分重要的内容。按照JSR的分类以及注解语义的不同,可以将JSR注解分为不同的系列,主要有以下几个系列:JSR-175:这个JSR是JavaSE5引入的,是Java......
  • 下一站 Gen AI 城市巡展指南来了!“码”上出发,Let's 构!
      亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这......
  • Day03.5
    HelloWorld编写代码随便新建一个文件夹,存放代码新建一个java文件文件后缀名为.java(例:hello.java)【注意点】系统可能没有显示文件后缀名,我们需要手动打开编写代码publicclassHello{ publicstaticvoidmain(String[]args){ System.out.print("Hell......
  • 03 开源任务管理系统:创建一个任务
    GitHub地址:https://github.com/dom-bro/task-manager虽说是一个任务管理系统,但简单地讲,其实就是任务的增删改查(CRUD)。其中最重要的又当属增,即创建任务,此为数据之源,删改查都依赖于它所产生的数据。交互设计凭着程序员的直觉,最初做成了一个表单如下图,表单项也对应了数据库......