【正点原子I.MX6ULL】U-BOOT/Kernel/Rootfs

必须插ENET2

U-BOOT

首先在 Ubuntu 中安装 ncurses 库, 否则编译会报错,安装命令如下:

sudo apt-get install libncurses5-dev
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_ddr512_emmc_defconfig
make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

u-boot.bin 就是编译出来的 uboot 二进制文件,uboot是个裸机程序,因此需要在其前面加上头部(IVT、DCD等数据)才能在I.MX6U 上执行。u-boot.imx 文件就是添加头部以后的 u-boot.bin, u-boot.imx 就是我们最终要烧写到开发板中的 uboot 镜像文件。

在 uboot 中,通过“make xxx_defconfig”来配置 uboot, xxx_defconfig就是不同板子的配置文件,这些配置文件都在 uboot/configs 目录中。

MMC通常指的是EMMC或SD卡,正点原子U-BOOT打印信息有:“MMC: FSL_SDHC: 0, FSL_SDHC: 1”,其中FSL_SDHC(0)接的 SD(TF)卡,FSL_SDHC(1)接的 EMMC。

setenv ipaddr 192.168.1.6
setenv ethaddr 00:04:9f:04:d2:35
setenv gatewayip 192.168.1.1
setenv netmask 255.255.255.0
setenv serverip 192.168.1.5
saveenv

在 uboot 中可以 ping 其他的机器,其他机器不能 ping uboot,因为 uboot 没有对 ping命令做处理,如果用其他的机器 ping uboot 的话会失败!

NFS

sudo apt-get install nfs-kernel-server rpcbind
sudo vim /etc/exports
/home/clay/linux/nfs *(rw,sync,no_root_squash)
sudo /etc/init.d/nfs-kernel-server restart
nfs 80800000 192.168.1.5:/home/clay/linux/nfs/zImage

TFTP

sudo apt-get install tftp-hpa tftpd-hpa
sudo apt-get install xinetd
mkdir /home/clay/linux/tftpboot
chmod 777 tftpboot
sudo vim /etc/xinetd.d/tftp
server tftp
{
	socket_type = dgram
	protocol = udp
	wait = yes
	user = root
	server = /usr/sbin/in.tftpd
	server_args = -s /home/clay/linux/tftpboot/
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}
sudo service tftpd-hpa start
sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/clay/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
sudo service tftpd-hpa restart

拷贝zImage文件到tftp目录下,并赋予 777 权限。

tftp 80800000 zImage

测试移植U-BOOT

setenv bootargs 'console=ttymxc0,115200 root=/dev/mmcblk1p2 rootwait rw'
setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000'
saveenv

root 用来设置根文件系统的位置, root=/dev/mmcblk1p2 用于指明根文件系统存放在mmcblk1 设备的分区 2 中。 EMMC 版本的核心板启动 linux 以后会存在/dev/mmcblk0、/dev/mmcblk1、 /dev/mmcblk0p1、 /dev/mmcblk0p2、 /dev/mmcblk1p1 和/dev/mmcblk1p2 这样的文件,其中/dev/mmcblkx(x=0~n)表示 mmc 设备,而/dev/mmcblkxpy(x=0n,y=1n)表示 mmc 设备x 的分区 y。在 I.MX6U-ALPHA 开发板中/dev/mmcblk1 表示 EMMC,而/dev/mmcblk1p2 表示EMMC 的分区 2。

EMMC设备的第 0 个分区保存 uboot,第 1 个分区保存 linux 镜像和设备树,第 2 个分区为 Linux 系统的根文件系统。

检查一下 EMMC 的分区 1 中有没有zImage 文件和设备树文件,输入命令 ls mmc 1:1

uboot 移植到此结束,简单总结一下 uboot 移植的过程:
①、不管是购买的开发板还是自己做的开发板,基本都是参考半导体厂商的 dmeo 板,而半导体厂商会在他们自己的开发板上移植好 uboot、 linux kernel 和 rootfs 等,最终制作好 BSP包提供给用户。我们可以在官方提供的 BSP 包的基础上添加我们的板子,也就是俗称的移植。
②、我们购买的开发板或者自己做的板子一般都不会原封不动的照抄半导体厂商的 demo板,都会根据实际的情况来做修改,既然有修改就必然涉及到 uboot 下驱动的移植。
③、一般 uboot 中需要解决串口、 NAND、 EMMC 或 SD 卡、网络和 LCD 驱动,因为 uboot的主要目的就是启动 Linux 内核,所以不需要考虑太多的外设驱动。
④、在 uboot 中添加自己的板子信息,根据自己板子的实际情况来修改 uboot 中的驱动。

Uboot 图形化配置

ubuntu 需要预装的库:

sudo apt-get install build-essential
sudo apt-get install libncurses5-dev

Linux

tar -jxvf xxx
sudo apt-get install lzop
./mx6ull_alientek_emmc.sh

编译完成以后就会在目录 arch/arm/boot 下生成 zImage 镜像文件。在 arch/arm/boot/dts 目录下生成 imx6ull-alientek-emmc.dtb 文件

rootfs

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.5:/home/clay/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.6:192.168.1.5:192.168.1.1:255.255.255.0::eth0:off'
saveenv
boot
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值