IMX6ULL uboot+zimage+rootfs的构建(二)

1、uboot的编译

uboot编译主要需要三种命令

a)清理uboot

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

b)执行编译配置选项 XXXXXX_defconfig位于uboot/configs,是核心板的配置文件,该文件夹是各种核心板的配置文件

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- XXXXX_defconfig

c)编译 普通make命令

make V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 

2、uboot烧写,使用nxp官网的imxdownload,我直接把imxdownload放到交叉编译环境bin文件夹了,所以在linux设置环境变量的时候,直接就可以输入imxdownload

imxdownload u-boot.bin /dev/sdb

3、编译内核

a)清理编译信息

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

b)默认配置选项,输出.config文件

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_defconfig

c)make menuconfig,无需操作,两次ESC退出

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

d)make内核和设备树

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

最终在arch/arm/boot生成zImage文件,arch/arm/boot/dts找到imx6ull-alientek-emmc.dtb文件

4、内核烧写需要用到有线接口,上网下载东西需要无线接口,因此设置虚拟机双网卡属性

a)编辑虚拟网络编辑器

分别设置虚拟网卡0桥接到有线网卡,虚拟网卡8桥接到无线网卡

b)进行虚拟机网络适配器设置,均为自定义

c)设置linux有线网卡IP地址

sudo vim /etc/netplan/01-network-manager-all.yaml

        输入如下内容

# Let NetworkManager manage all devices on this system
network:
  version: 2
  renderer: NetworkManager

  ethernets:
    ens33:  # 网卡名
      dhcp4: no  # 设置为静态,如果动态改为yes,下面的参数都不需要设置了
      addresses: [192.168.1.250/24]  # 地址和子网掩码,注>意地址段应该与宿主机一致
      optional: true
      gateway4: 192.168.1.1  # 默认网关,与宿主机一致
      nameservers:
          addresses: [8.8.8.8,114.114.114.114]  # DNS

d)重启虚拟机

输入ifconfig发现IP更改正确

4、uboot采用tftp的方式加载zImage内核文件,为了方便调试,我们不使用emmc里面已经烧写好的rootfs文件系统,我们使用nfs文件系统。所以需要配置linux tftp服务器和linux nfs服务器。具体操作如下:

1)配置tftp服务器

a)配置tftp服务器供uboot加载设备树文件和zImage文件

sudo apt-get install tftp-hpa tftpd-hpa 
sudo apt-get install xinetd                        #安装TFTP服务器必备的软件

mkdir /home/wyd/linux/tftpboot
chmod 777 /home/wyd/linux/tftpboot                 #设置tftp的文件夹路径

  b)设置tftp客户端

sudo vim /etc/xinetd.d/tftp                             #配置tftp客户端,一般配置文件都在etc下
server tftp
{
	socket_type = dgram                            #UDP的socket类型
	protocol = udp                                 #协议类型是UDP
	wait = yes                                     #会等待
	user = root                                    #用户是根用户
	server = /usr/sbin/in.tftpd                    #服务软件
	server_args = -s /home/wyd/linux/tftpboot/     #服务的文件位置
	disable = no
	per_source = 11
	cps = 100 2
	flags = IPv4
}

c)设置tftp服务端

sudo service tftpd-hpa start                       #启动tftp服务器
sudo vim /etc/default/tftpd-hpa                    #设置tftp服务器
#/etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/wyd/linux/tftpboot"
TFTP_ADDRESS=":69" 
TFTP_OPTIONS="-l -c -s" 

d)重启tftp服务

sudo service tftpd-hpa restart

e)将dtb和zImage拷贝到tftpboot文件夹

重启uboot会发现uboot加载了内核文件

2)设置nfs文件系统,供uboot加载rootfs根文件系统

a)安装nfs服务器

sudo apt-get install nfs-kernel-server rpcbind

b)配置nfs服务器

sudo vi /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/wyd/linux/nfs *(rw,sync,no_root_squash)

 c)要先设置跟文件系统文件夹,不然nfs服务起不来

d)重启nfs服务

sudo /etc/init.d/nfs-kernel-server restart

f)将跟文件系统rootfs.tar.bz2拷贝到nfs/rootfs文件夹

g)解压文件

tar -xjvf rootfs.tar.bz2 

h)删除压缩文件

rm -rf rootfs.tar.bz2

i)设置uboot的bootargs变量

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:/home/wyd/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off'

j)重启uboot,发现nfs服务器加载rootfs文件系统错误

导致此错误得原因是:uboot中使用得NFS版本为V2版本,而ubuntu中的NFS版本为V3,V4及以上版本,从而导致uboot不能再NFS服务器中找到文件。

解决办法为:buntu中得NFS兼容V2。修改/etc/default/nfs-kernel-server 文件

k)

sudo vim /etc/default/nfs-kernel-server

RPCNFSDCOUNT="-V 2 8"
RPCMOUNTDOPTS="-V 2 --manage-gids"
RPCSVCGSSDOPTS="--nfs-version 2,3,4 --debug --syslog"

l)重启nfs服务器

sudo service nfs-kernel-server restart

m)又遇到一个bug

网线松了,会出这个问题,遇到k偶尔会出现的也是这个问题

启动文件系统成功

5、uboot启动信息


U-Boot 2016.03 (Apr 08 2024 - 15:53:08 +0800)        uboot版本和编译时间

CPU:   Freescale i.MX6ULL rev1.1 792 MHz (running at 396 MHz)  CPU型号、频率和运行频率
CPU:   Industrial temperature grade (-40C to 105C) at 41C        芯片的结温
Reset cause: POR                                                                        复位原因POR,即复位管脚原因
Board: I.MX6U ALPHA|MINI                                                         板子名称
I2C:   ready                                                                                    I2C就绪
DRAM:  512 MiB                                                                           DRAM 512MB
MMC:   FSL_SDHC: 0, FSL_SDHC: 1         有两个MMC控制器,其中FSL_SDHC(0)接的 SD卡,                                                                      FSL_SDHC(1)接的 EMMC
In:    serial                                                                                     标准输入输出和ERR端口
Out:   serial
Err:   serial
switch to partitions #0, OK                             从FSL_SDHC(1)启动的uboot,现在切换到                                                                   FSL_SDHC(0)
mmc0 is current device                                  切换到MMC0
Net:   FEC1                                                     网口是FEC1
Normal Boot                                                    正常boot启动
Hit any key to stop autoboot:  0 

6、uboot的常用命令

help

查看板子信息

bdinfo 

打印环境变量,这个比较重要,配置启动项有用

printenv

设置环境变量

setenv 变量名 信息(字符串)不能有等号

setenv bootdelay 5

如果有空格,用‘’括起来

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:/home/wyd/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off'
saveenv

·     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值