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
·