嵌入式系统移植--Linux内核加载与加载

本文介绍了四种启动嵌入式Linux系统的方法:通过tftp加载内核和根文件系统,通过EMMC加载,tftp加载内核并用nfs挂载根文件系统,以及将uboot安装到EMMC中。每种方法详细阐述了操作步骤,包括文件复制、权限设置、uboot启动参数修改以及文件系统的加载和安装过程。
摘要由CSDN通过智能技术生成

目录

一、通过tftp加载内核和根文件系统

二、通过 EMMC 加载内核和根文件系统

 三、通过 tftp 加载内核通过 nfs 挂载根文件系统

四、将 uboot 安装到 EMMC


一、通过tftp加载内核和根文件系统

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

修改这些文件的权限

sudo chmod 777 /tftpboot/*

2. 重启 tftp 服务器

sudo service tftpd-hpa restart

3.连接开发板与电脑,在 uboot 交互模式下,设置 uboot 的启动参数

# setenv ipaddr ***.***.***.***

# setenv serverip xxx.xxx.xxx.xxx

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

# setenv bootargs root=/dev/nfs nfsroot=xxx.xxx.xxx.xxx:/opt/4412/rootfs/ rw
console=ttySAC2,115200 init=/linuxrc ip=***.***.***.***

//注 1:xxx.xxx.xxx.xxx 为 ubuntu 主机的 ip,***.***.***.***为开发板的 ip,必须和 ubuntu
//主机的 ip 在同一个网段(根据自己电脑情况进行设置)

//注 2:以上设置手动输入,命令粘贴可能会有中文符号

//设置完成后保存这些参数

# saveenv

4.检查网络设置是否正确,使用网线连接开发板与电脑,然后给开发板重新上电,上电之
后观察 uboot 是否能通过 tftp 加载和启动内核,启动时是否能挂载根文件系统(ext2),
启动完成后在终端上输入 linux 下的 shell 命令测试是否正常

二、通过 EMMC 加载内核和根文件系统

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

1.给开发板重新上电,在 uboot 交互模式下,去下载并安装这些镜像

下载内核镜像到内存中

# tftp 0x41000000 uImage

将内核镜像写入到 EMMC 中指定的扇区

# mmc write 0 0x41000000 0x800 0x2000

显示如下信息表示安装成功

下载设备树到内存中

# tftp 0x41000000 exynos4412-fs4412.dtb

将设备树写入到 EMMC 中指定的扇区

# mmc write 0 0x41000000 0x2800 0x800

显示如下信息表示安装成功

 下载根文件系统镜像到内存中

# tftp 0x41000000 ramdisk.img

将根文件系统镜像写入到 EMMC 中指定的扇区

# mmc write 0 0x41000000 0x3000 0x2000

显示如下信息表示安装成功

2.因为要从 EMMC 驱动,所以还要修改 uboot 的启动参数

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

若设置无法保存可尝试如下格式
# 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.给开发板重新上电,上电之后观察内核是否能通过 EMMC 加载和启动内核,启动完成
后是否能挂载根文件系统(ext2),在终端上输入 linux 下的 shell 命令测试是否正常

 三、通过 tftp 加载内核通过 nfs 挂载根文件系统

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

 1.将“根文件系统镜像”目录下的“rootfs.tar”拷贝到 ubuntu 中 nfs 工作目录下

解压跟文件系统到 nfs 工作目录

$ sudo tar xvf rootfs.tar.xz

解压完成后删除原有压缩包

$ sudo rm rootfs.tar.xz

2.修改 uboot 的启动参数

# setenv bootcmd tftp 0x41000000 uImage\;tftp 0x42000000 exynos4412-fs4412.dtb\;bootm
0x41000000 - 0x42000000

设置完成后保存这些参数 

# saveenv

3.重启 nfs 服务器
$ sudo service nfs-kernel-server restart

4.给开发板重新上电,上电之后观察内核是否能通过 tftp 加载和启动内核,启动完成后是
否能挂载根文件系统(nfs),在终端上输入 linux 下的 shell 命令测试是否正常,若启
动正常我们向 nfs 的工作目录中添加了新的文件之后可以在开发板直接看到

四、将 uboot 安装到 EMMC

以上的几种方式中我们既可以通过网络启动内核也可以将内核安装到 EMMC 中从本地
启动,但是对于 uboot 我们一直使用的是从 SD 卡启动,所以我们也可以将 uboot 安
装到 EMMC 中然后从 EMMC 启动 uboot,这样就可以不使用 SD 卡了

1.将“u-boot 镜像”目录下的“u-boot-fs4412.bin”拷贝到 ubuntu 中 tftp 工作目录

2.给开发板重新上电,在 uboot 交互模式下,去下载并安装 uboot 

# tftp 0x41000000 u-boot-fs4412.bin

将内核镜像安装到 EMMC 中指定的扇区

# emmc open 0
# mmc write 0 0x41000000 0x0 0x800
# emmc close 0

显示如下信息表示安装成功

3.关闭开发板电源,调整拨码开关位置为 EMMC 启动

4.给开发板重新上电,观察 uboot 是否能正常启动

 因为启动的是 EMMC 中的 uboot 所以环境变量还需要重新设置

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值