lv12 linux内核的安装与加载

2023-12-16 04:51:59

目录

1?tftp加载Linux内核及rootfs

1.1 uboot内核启动命令?

1.2?uboot自启动参数环境变量?

1.3 实验

2?EMMC加载Linux 内核及rootfs?

?编辑

?2.1 emmc中写入uimage

?编辑

?2.2 emmc中写入dtb

?2.3 emmc中写入根文件系统

2.4 设置环境变量?

3?tftp加载Linux内核nfs挂载rootfs

3.1 复制rootfs压缩包到nfs服务器目录?

3.2 设置环境变量

3.3 启动检测?

4 最后EMMC加载boot

4.1 复制uboot到tftp服务器目录

4.2 写入emmc?编辑

4.3 重新上电?

5 练习


1?tftp加载Linux内核及rootfs

tftp即通过网络把远端服务器中的的linux内核、设备树、根文件系统辅助到内存中运行。

1.1 uboot内核启动命令?

bootm
    启动指定内存地址上的Linux内核并为内核传递参数
	bootm kernel-addr ramdisk-addr dtb-addr
	注:
	    kernel-addr:	内核的下载地址  
	    ramdisk-addr:	根文件系统的下载地址  	
	    dtb-addr:		设备树的下载地址
	    若不使用相应的地址,对应的位置写“-”
	eg: 
	    bootm 0x41000000 - 0x42000000	

?

1.2?uboot自启动参数环境变量?

bootargs
    eg:
    setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs     
    rw console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***
    注:
	root		根文件系统类型(nfs)
	nfsroot		网络文件系统路径(xxx.xxx.xxx.xxx:/opt/4412/rootfs)
	rw      	操作网络文件系统的权限(rw)
	console		控制台(使用串口2,波特率115200)
	init        	init进程的位置(/linuxrc)
	ip          	linux启动后自身的IP(***.***.***.***)

1.3 实验

详细信息参考实验手册

将资料中“ Linux 内核镜像”目录下的“ uImage ”和“ exynos4412-fs4412.dtb ”拷贝到 ubuntu 中 tftp 工作目录下
将资料中“根文件系统镜像”目录下的“ramdisk ”也拷贝到 ubuntu tftp 工作目录下

步骤一:建立tftp服务器目录,/home/linux/tftpboot(具体如何搭建参考手册)

步骤二:修改uboot内核启动命令,保存环境变量

setenv ipaddr [本机ip]

setenv serverip ]tftp服务器ip]

setenv gatewayip [网关]

setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;tftp 0x43000000 ramdisk.img\;bootm 0x41000000 0x43000000 0x42000000

saveenv

?步骤三:重启开发板

?

2?EMMC加载Linux 内核及rootfs?

? ? 通过上述方式我们虽然可以加载 Linux 内核和根文件系统并正常运行,但上述方式我们是把
内核镜像、设备树、根文件系统镜像都放到了 tftp 服务器上,然后开发板上电之后再通过
tftp 去下载这些文件到开发板的内存中运行;但在实际做一个产品的时候我们不可能每次开
机都通过网络去服务器上下载这些镜像,所以以下步骤我们就将这些镜像安装到开发板上
的 EMMC 中,然后从 EMMC 启动内核 ? ?

?2.1 emmc中写入uimage

查看uimage大小,计算需要占用多少个扇区,我们从0x800开始,前面以后留个uboot。后面需要1708个扇区,所以给了2000个扇区存放。

??

?2.2 emmc中写入dtb

直接从0x2800开始刷,主要比43大就行,实验中分了800

?2.3 emmc中写入根文件系统

0x2800+0x800=0x3000,大小计算同上

2.4 设置环境变量?

setenv bootcmd 'mmc read 0 0x41000000 0x800 0x2000\;mmc read 0 0x42000000 0x2800 0x800\;mmc read 0 0x43000000 0x3000 0x2000\;bootm 0x41000000 0x43000000 0x42000000'
saveenv

3?tftp加载Linux内核nfs挂载rootfs

这种方式,开发效率较高。

在后续的课程中我们会经常修改内核和设备数的源码,也会经常向根文件系统中添加一些
驱动或应用程序,这样每次修改之后我们都要重新将内核或根文件系统安装到 EMMC 中,
步骤会比较繁琐,开发效率也比较低,所以在 开发阶段 我们经常使用的方式是通过 tftp
载内核和设备树再通过 nfs 挂载根文件系统(后续课程都是使用这种方式),这样步骤
简单,效率也比较高,待产品定型之后在安装到 EMMC

3.1 复制rootfs压缩包到nfs服务器目录?

?

3.2 设置环境变量

3.3 启动检测?

??

?

4 最后EMMC加载boot

系统脱离SD卡的启动方式

sd默认是第1块启动,第0块是分区表,但是emmc不一样,默认是第0块启动

4.1 复制uboot到tftp服务器目录

4.2 写入emmc

4.3 重新上电?

5 练习

1.简述uboot中bootargs环境变量的功能?

1 bootargs 是一个环境变量,用于指定 Linux 内核启动时的参数。它是 U-Boot 启动 Linux 内核时传递给内核的第一个参数,也是内核启动时使用的命令行参数。U-Boot 在启动 Linux 内核前,将 bootargs 环境变量的值拼接成一个字符串,并传递给内核。这个字符串包含了启动内核所需的所有参数和信息,内核启动后会解析这个字符串并按照其中的参数和信息进行配置和初始化.它直接影响到内核启动后的配置和运行。

文章来源:https://blog.csdn.net/m0_60718520/article/details/134984338
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。