【1】u-boot启动程序
1、获取uboot源码渠道
1)u-boot官方:https://ftp.denx.de/pub/u-boot/
2)开发板厂家
3)芯片厂家
4)主管领导(推荐)
官网的源码基本不支持此处理器
【2】uboot版本选择
*1. 芯片厂家提供哪个版本就直接用哪个版本
2. 不选最新 --》 不稳定,资料较少
3. 不选太旧 --》 不支持硬件平台
4. 不选择测试版(后缀为rc),选择稳定版
【3】移植uboot源码
1、拷贝源码到ubuntu中,并解压缩
2、进入uboot源码目录
3、修改Makefile配置交叉编译工具链
1)打开Makefile,找到:
198 ifeq ($(HOSTARCH),$(ARCH))
199 CROSS_COMPILE ?=
200 endif
198 ifeq (arm,arm)
199 CROSS_COMPILE ?= arm-none-linux-gnueabi-
200 endif
4、执行:make distclean # 只在第一次编译时执行一次
5、make fs6818_config
打印以下信息表示配置成功:
Configuring for fs6818 board…
6、执行:make
打印以下信息表示编译成功:
NSIH : 188 line processed.
NSIH : 512 bytes generated.
Generate destination file: ubootpak.bin
【4】1. 开发阶段系统部署方式 (驱动开发)
uboot :在 EMMC/SD卡中
uImage :使用tftp下载到内存中
rootfs :使用nfs网络文件系统的方式进行挂载
2. 产品阶段系统部署方式(项目完成)
uboot :在EMMC/SD卡中
uImage :在EMMC/SD卡中
ramdisk.img :在EMMC/SD卡中
【5】开发阶段系统部署方式
1、启动uboot进入uboot的交互界面
2、先将uImage镜像文件拷贝到tftpboot目录下
3、下载内核镜像uImage到内存中
tftp 0x48000000 uImage
4、设置自启动参数bootargs
uboot环境变量中的bootargs变量是一个自启动参数,
linux内核启动时,会uboot环境变量的分区读取bootargs变量的值。
(只需要设置一次)
ubuntu系统是32位:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/linux/nfs/rootfs rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.2.222
saveenv
ubuntu系统是16.04 64位:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/linux/nfs/rootfs v4,tcp rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.2.222
ubuntu系统是18.04以上 64位:
setenv bootargs root=/dev/nfs nfsroot=192.168.1.250:/home/linux/nfs/rootfs v4,tcp rw console=/dev/ttySAC0,115200 init=/linuxrc ip=192.168.2.222
ubuntu系统是18.04以上版本需要修改ubuntu中的配置文件:
参考文档:https://www.jianshu.com/p/10e3245f15f3?tdsourcetag=s_pctim_aiomsg
root=/dev/nfs:根文件系统的类型是nfs
nfsroot=192.168.2.250:/home/linux/nfs/rootfs: 根文件系统的路径,改成自己的ubuntuIP地址和根文件系统的路径
rw:对根文件系统具有可读可写的权限
console=/dev/ttySAC0,115200:开发板使用的是串口0,波特率是115200
init=/linuxrc:内核启动之后执行的1号进程
ip=192.168.2.222:开发板的IP地址
bootargs:告诉内核从哪里挂载根文件系统的
5、启动linux内核
bootm 0x48000000
bootm:用于启动linux内核的命令
6、总结:根文件系统挂载不成功的原因
1)检查nfs安装和配置是否正确
2)重启nfs服务
sudo service nfs-kernel-server restart
3)检查bootargs参数设置是否正确
7、设置uboot自启动的方式启动linux系统
setenv bootcmd tftp 0x48000000 uImage\;bootm 0x48000000
saveenv
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)