imx6ull,从uboot到linux启动

很久没搞嵌入式了,为了学习,买了正点的arm板子,芯片是Freescale的imx6ull。

为了更好的学习,决定放弃正点官网的资料,一切都从原网下载。

原料准备

imx6ull手册官网下载
正点imx6ull的板子TB买的
一张小SD卡JD买的
交叉编译工具https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
ubuntu22虚拟机
uboot源码https://github.com/u-boot/u-boot.git
linux源码https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.105.tar.xz
busybox源码https://www.busybox.net/downloads/busybox-snapshot.tar.bz2(这是每日构建版本,不建议使用)

1、交叉编译工具

我是把gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz 解压到/opt/arm-gcc下面

lq@lq-server /o/arm-gcc> ls
gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/
lq@lq-server /o/arm-gcc> pwd
/opt/arm-gcc
lq@lq-server /o/arm-gcc>

在环境变量的PATH中追加/opt/arm-gcc/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin

2、uboot编译

编译

进入u-boot目录

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build_imx6ull mx6ull_14x14_evk_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- O=build_imx6ull -j4

烧写

烧写build_imx6ull/u-boot-dtb.imx到SD卡
把SD卡插入ubuntu,找到设备名称,我这里是sdd

sudo dd if=u-boot-dtb.imx of=/dev/sdd seek=2

把SD卡插到板子,并且修改拨码到SD卡启动,接上串口,波特率115200,然后上电

=> 
U-Boot 2023.04-rc4-00044-gc84a00a647 (Mar 29 2023 - 04:45:19 +0800)

arm-linux-gnueabihf-gcc (Linaro GCC 7.5-2019.12) 7.5.0
GNU ld (Linaro_Binutils-2019.12) 2.28.2.20170706
=> 

启动成功

3、linux 内核编译

修改设备树文件

进入linux源码目录
修改文件arch/arm/boot/dts/imx6ul-14x14-evk.dtsi b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
将设备中的spi4修改为disabled

diff --git a/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
index 1a18c41ce..e95503fcd 100644
--- a/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
+++ b/arch/arm/boot/dts/imx6ul-14x14-evk.dtsi
@@ -86,7 +86,7 @@ spi4 {
                compatible = "spi-gpio";
                pinctrl-names = "default";
                pinctrl-0 = <&pinctrl_spi4>;
                status = "disabled";
                gpio-sck = <&gpio5 11 0>;

编译

make mrproper
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v6_v7_defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4

搭建tftp服务器

ubuntu上

sudo apt install tftpd-hpa -y

修改配置文件

lq@lq-server ~/s/g/linux-5.15.103 (master)> cat /etc/default/tftpd-hpa 
# /etc/default/tftpd-hpa
#
TFTP_USERNAME="lq"
TFTP_DIRECTORY="/home/lq/mnt/tftp"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"

将TFTP_USERNAME改为当前用户名字
TFTP_DIRECTORY修改为一个自己喜欢的tftp目录

然后重启服务

 sudo systemctl restart tftpd-hpa.service

传文件

经过编译,应该已经生成了我们所需要的两文件,内核镜像与设备树文件

lq@lq-server ~/s/g/linux-5.15.103 (master)> file ./arch/arm/boot/dts/imx6ull-14x14-evk.dtb
./arch/arm/boot/dts/imx6ull-14x14-evk.dtb: Device Tree Blob version 17, size=31740, boot CPU=0, string block size=2236, DT structure block size=29448
lq@lq-server ~/s/g/linux-5.15.103 (master)> file ./arch/arm/boot/zImage
./arch/arm/boot/zImage: Linux kernel ARM boot executable zImage (little-endian)
lq@lq-server ~/s/g/linux-5.15.103 (master)> 

将这两个文件拷贝到tftp目录下

uboot加载镜像与设备树

板子接上网线,与ubuntu直连,进入uboot界面
设置uboot eth的MAC地址

=> setenv ethaddr 92:1b:93:f4:44:9a

设置uboot IP地址

=> setenv ipaddr 192.168.101.9

设置服务器地址

=> setenv serverip 192.168.101.3

然后ping一下,能通就说明是好的

=> ping ${serverip}             
Using ethernet@20b4000 device
host 192.168.101.3 is alive
=> 

先测试一下

=> setenv bootargs console=ttymxc0,115200
=> tftp 0x82000000 zImage;tftp 0x83000000 imx6ull-14x14-evk.dtb;bootz 0x82000000 - 0x83000000

这时候能看到内核启动,但最后会死在没有文件系统上

4、使用busybox构建根文件系统

在构建根文件系统前,需要选一个自己喜欢的目录作为根目录。
我这里用的是/home/lq/mnt/fsroot

libc拷贝

编译器会提供的它使用的libc库,拷过来就行,其目录在/opt/arm-gcc/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc

cp -a /opt/arm-gcc/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/arm-linux-gnueabihf/libc/* /home/lq/mnt/fsroot

编译busybox

进入busybox目录

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- install CONFIG_PREFIX=/home/lq/mnt/fsroot

创建rcS

创建文件/home/lq/mnt/fsroot/etc/init.d/rcS
并且添加

#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t tmpfs none /var
mount -t tmpfs none /dev
/sbin/mdev -s
mkdir /var/log

添加执行权限

chmod +x /home/lq/mnt/fsroot/etc/init.d/rcS

NFS搭建

安装

sudo apt install -y nfs-kernel-server 

修改配置

lq@lq-server ~/s/g/busybox (master)> cat /etc/exports 
# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients.  See exports(5).
#
# Example for NFSv2 and NFSv3:
# /srv/homes       hostname1(rw,sync,no_subtree_check) hostname2(ro,sync,no_subtree_check)
#
# Example for NFSv4:
# /srv/nfs4        gss/krb5i(rw,sync,fsid=0,crossmnt,no_subtree_check)
# /srv/nfs4/homes  gss/krb5i(rw,sync,no_subtree_check)
#


/home/lq/mnt/fsroot 192.168.101.0/24(rw,sync,no_subtree_check)

重启服务

sudo systemctl restart nfs-kernel-server.service 

修改uboot启动项

进入板子串口中

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs ip=${ipaddr}:${serverip}:${serverip}:255.255.255.0:eth0 nfsroot=${serverip}:/home/lq/mnt/fsroot,v3,tcp'
tftp 0x82000000 zImage;tftp 0x83000000 imx6ull-14x14-evk.dtb;bootz 0x82000000 - 0x83000000
[    8.822822] hub 1-1:1.0: 4 ports detected
[   11.552746] fec 20b4000.ethernet eth0: Link is Up - 100Mbps/Full - flow control rx/tx
[   11.569253] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
[   11.585431] Sending DHCP requests .., OK
[   17.092476] IP-Config: Got DHCP answer from 192.168.101.3, my address is 192.168.101.151
[   17.101404] IP-Config: Complete:
[   17.104783]      device=eth0, hwaddr=e2:58:27:8b:c0:d1, ipaddr=192.168.101.151, mask=255.255.255.0, gw=192.168.101.3
[   17.116521]      host=eth0, domain=, nis-domain=(none)
[   17.121832]      bootserver=192.168.101.3, rootserver=192.168.101.3, rootpath=
[   17.121929]      nameserver0=192.168.101.3
[   17.162705] ALSA device list:
[   17.166606]   No soundcards found.
[   17.296678] VFS: Mounted root (nfs filesystem) readonly on device 0:16.
[   17.312822] devtmpfs: mounted
[   17.319162] Freeing unused kernel image (initmem) memory: 1024K
[   17.338567] Run /sbin/init as init process

Please press Enter to activate this console. 
~ # uname -r
5.15.103-gf1de6c2f53e3

启动成功

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值