【正点原子I.MX6ULL】U-BOOT/Kernel/Rootfs
必须插ENET2
U-BOOT
首先在 Ubuntu 中安装 ncurses 库, 否则编译会报错,安装命令如下:
sudo apt-get install libncurses5-dev
- 1
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
- 1
- 2
- 3
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
- 1
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
- 1
- 2
- 3
- 4
- 5
- 6
- 7
在 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
- 1
- 2
- 3
- 4
nfs 80800000 192.168.1.5:/home/clay/linux/nfs/zImage
- 1
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
- 1
- 2
- 3
- 4
- 5
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
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
sudo service tftpd-hpa start
- 1
sudo vim /etc/default/tftpd-hpa
- 1
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/clay/linux/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="-l -c -s"
- 1
- 2
- 3
- 4
- 5
- 6
sudo service tftpd-hpa restart
- 1
拷贝zImage文件到tftp目录下,并赋予 777 权限。
tftp 80800000 zImage
- 1
测试移植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
- 1
- 2
- 3
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
- 1
- 2
Linux
tar -jxvf xxx
sudo apt-get install lzop
./mx6ull_alientek_emmc.sh
- 1
- 2
- 3
编译完成以后就会在目录 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
- 1
- 2
- 3
文章来源: recclay.blog.csdn.net,作者:ReCclay,版权归原作者所有,如需转载,请联系作者。
原文链接:recclay.blog.csdn.net/article/details/119090771
- 点赞
- 收藏
- 关注作者
评论(0)