linux系统移植U-boot与kernel的搭载流程(交互模式下)

Linux系统移植四大部分:①搭建交叉开发环境。②bootloader的选择和移植【本文选用bootloader下的U-boot】。③uImage的配置、编译与移植。④根文件系统的制作。(①④全部已完成,本文只讲解②③如何搭载这些东西启动移植目标)

注:本文不涉及安装交叉编译工具链流程,文章底部具有交叉编译工具链的下载方式和安装流程,需要可以自取。若有需要自启动模式的,文章底部也会简单介绍。

使用的交叉编译器:arm-none-linux-gnueabi-gcc

本文关键技术点:tftp串口通信、nfs文件挂载、bootm环境启动参数设定

本文移植:linux(主机端)->目标端:开发板(fs4412、搭载exynos4412芯片、armv7架构、cotex-A9型号)

流程:①主机端搭载tftp服务器、创建共享文件夹并配置tftp命令。②主机端设定nfs文件系统路径。③目标端设定启动环境,保证tftp服务器下载启动文件至内存、设定主机端与移植目标端的ip、初始化搭载文件系统命令,保存环境命令。

①主机端搭载tftp服务器、创建共享文件夹并配置tptp命令。

这里我们使用的主机端是ubuntu(18.08 64bit)搭载VmWare Workstation上。首先我们需要下载tftp服务器至linux端口,命令如下:

sudo apt-get install tftpd-hpa tftp-hpa//下载服务器    				

若下载失败,可能之前有残留文件或未更新导致,可以尝试如下操作:

卸载tftp服务器及客户端,并删除配置文件--purge
sudo apt-get remove --purge tftpd-hpa tftp-hpa
重新安装tftp服务器及客户端
sudo  apt-get update  更新软件包
sudo apt-get install tftpd-hpa tftp-hpa 重新下载

下载完成后,我们需要创建一个共享文件夹,【将测试文件放进去】。这里要注意权限的赋予,保证【共享文件夹】及【测试文件】都具有可读可写的权限。(这里直接给了0777权限)

sudo mkdir TFTPShareDir //创建共享文件夹
sudo chmod 0777 TFTPShareDir//赋予权限

接下来使用命令更改tftp参数,主要为了链接这个文件夹为共享文件夹 

sudo vi /etc/default/tftpd-hpa

更改成这样

TFTP_USERNAME="tftp"//配置服务器名称
TFTP_DIRECTORY="/home/TFTPShareDir"  //配置共享文件夹路径
TFTP_ADDRESS="0.0.0.0:69" //配置tftp服务器地址
TFTP_OPTIONS="-c  -s  -l"// 解释起来比较复杂,建议查看tftp手册得到c s l作用

然后重置tftp运行一下就完成了第一步。具体命令为:

sudo service tftpd-hpa restart

②主机端设定nfs文件系统路径。

这里的话我们先将小型文件系统拷贝至我们的linux系统下即可。博主这里用的是rootfs文件包,记住拷贝rootfs小型文件系统的路径,然后更改nfs配置环境即可。命令如下:

先打开nfs配置环境

sudo vim /etc/exports 

再更改nfs配置环境

 ③目标端设定启动环境,保证tftp服务器下载启动文件至内存、设定主机端与移植目标端的ip、初始化搭载文件系统命令,保存环境命令。

现在我们去开发板进行调试,这里我们使用串口录入开发板信息进行调试,搭载的软件为TeraTerm-4.101

先配置开发板的tftp服务器ip,及主机端的服务器ip 命令如下

再配置nfs搜寻命令 这是一句话

#setenv bootargs root=/dev/nfs nfsroot=192.168.8.47:/home/farsight/rootfs rw console=ttySAC2,115200  init=/linuxrc  ip=192.168.8.88  clk_ignore_unused
翻译:从服务器192.168.8.47端口将nfs(网络文件系统)下载至板子192.168.8.88。设置串口波特率为115200,随后将其作为内核的根文件目录。 并且忽略时钟的影响。【注:内核需有支持传输nfs的网络驱动】

再配置运行启动命令,这也是一句话。

#setenv bootcmd tftp 41000000 uImage\;tftp 42000000 exynos4412-fs4412.dtb\;bootm 41000000 – 42000000 
翻译:使用tftp网络通信将内核放置运行内存41000000位置、将设备树文件放至内存42000000位置

然后保存当前配置环境:

#saveent

----------------------------------------------------------我是分割线--------------------------------------------------

到这一步,我们的启动命令已经搭载完毕、同时tftp服务器在主机端、目标端都已链接。然后我们直接boot启动板子即可,注意观察tftp是否下载内容,nfs是挂载成功,若搜寻到挂载文件并可正常使用linux命令就是成功了,类似如下:

 此时操作板子的文件系统,linux端口也会出现变化,示例如下:(口误,应该是文件)

 我们去linux端口去看一下

 ------------------------综上,为linux操作系统移植并启动目标(板子)操作---------------------------------

④接下来放上交叉编译工具链的下载:

  1. 如果要自己编译工具链,从以下链接下载源码

crosstools-ng下载地址

http://ymorin.is-a-geek.org/download/crosstool-ng/

同时对每一个版本都有相应的补丁我们尽量把这些补丁打上,这些补丁的下载地址是

http://ymorin.is-a-geek.org/download/crosstool-ng/01-fixes/

  1. 解压工具链压缩包
$  cd  ~
$ mkdir toolchain
$ cd toolchain

将gcc-4.6.4.tar.xz拷贝到toolchain目录下并解压:

$ tar  xvf  gcc-4.6.4.tar.xz

环境变量的添加,修改文件/etc/bash.bashrc添加如下内容

export PATH=$PATH:/home/linux/toolchain/gcc-4.6.4/bin

重启配置文件:

$ source  /etc/bash.bashrc

⑤自启动的配置方法

从EMMC加载内核和文件系统(自启动)
a)拷贝测试文件到虚拟机tftp共享文件夹目录下
b)烧写内核镜像到EMMC上
# tftp  41000000   uImage
# movi  write  kernel  41000000

c)烧写设备树文件到EMMC上
# tftp  41000000   exynos4412-fs4412.dtb
# movi  write  dtb  41000000

d)烧写文件系统镜像到EMMC上
# tftp 41000000  ramdisk.img
# movi  write  rootfs  41000000  300000

e)设置启动参数
# setenv bootcmd movi read kernel 41000000\;movi read dtb 42000000\;movi read rootfs 43000000 300000\;bootm 41000000 43000000 42000000
# saveenv
boot 启动, 
f)重新启动开发板,u-boot自动加载、执行内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值