linux启动

我们在下面会在u-boot下面所有tftp服务从服务器下载linux内核和根文件,并且使用NFS挂载内核的根文件系统,所有下面需要做以下准备:

准备阶段

linux根文件编译

buildroot编译根文件流程:https://www.cnblogs.com/Hlc-/p/17647373.html

u-boot编译

u-boot编译和启动流程:https://www.cnblogs.com/Hlc-/p/17697588.html#5261724

u-boot网络移植流程:https://www.cnblogs.com/Hlc-/p/18192177

u-boot LCD移植流程(这个步骤不是必要的):https://www.cnblogs.com/Hlc-/p/18192242

linux编译构建

linux内核构建流程:https://www.cnblogs.com/Hlc-/p/18192576

linux内核网络驱动修改:https://www.cnblogs.com/Hlc-/p/18200017

nfs文件服务搭建

nfs服务器搭建流程:https://www.cnblogs.com/Hlc-/p/18190402

tftp服务器搭建

tftp服务器构建流程:https://www.cnblogs.com/Hlc-/p/18190380

准备启动菜单

linux的启动就和煮菜一样,上面的准备工作是准备工具,下面我们将准备启动的调料。

复制根文件到上面nfs服务器的目录下面

buildroot编译的根文件系统位于buildroot目录下面的output/images
根文件系统位于的位置

我的上面的nfs的目录为/home/q123/nfs/rootfs目录(具体看上面的nfs搭建相关的流程)

把root.tar复制到/home/q123/nfs/rootfs目录

cp root.tar /home/q123/nfs/rootfs
#进入/home/q123/nfs/rootfs目录
cd /home/q123/nfs/rootfs
#解压.tar文件
tar -xvf root.tar

复制linux内核和设备树到tftp服务的目录下面

我的TFTP服务的目录位于 /home/q123/tftp (具体看上面的TFTP服务搭建)
在编译的内核arch/arm/boot目录下面有以下文件
boot目录

zImage:Linux内核文件
dts:这个目录下面有我们需要的设备树文件

arch/arm/boot/dts目录下面有很多设备树文件,.dts后缀结尾的是我们编写的设备树描述代码,.dtb结尾的编译器用.dts编译生成的二进制代码,所以我们需要的是.dtb文件,我们选择选择的是imx6ull-14x14-evk.dtb
dts目录

把zImage和imx6ull-14x14-evk.dtb文件复制到tftp服务的目录下面

cp arch/arm/boot/zImage /home/q123/tftp/
cp arch/arm/boot/dts/imx6ull-14x14-evk.dtb /home/q123/tftp/

开始启动linux

在开始启动Linux之前我已经默认你已经准备好了u-boot,已经做好了u-boot的网络修改,并且已经能在板子上面启动u-boot。

获取服务器IP

虚拟机的ubuntu需要设置网络适配器为桥接模式,使虚拟机与板子能在同一个网段,并且尽量设置自己的IP为静态IP(静态IP设置方法:https://www.cnblogs.com/Hlc-/p/17629806.html);

虚拟机的配置

在自己的ubuntu上面执行以下代码

ifconfig

输出的信息为:

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.227  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::250:56ff:fe3f:9efd  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:3f:9e:fd  txqueuelen 1000  (Ethernet)
        RX packets 600427  bytes 255935146 (255.9 MB)
        RX errors 34  dropped 21196  overruns 0  frame 0
        TX packets 543879  bytes 62517248 (62.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 19  base 0x2000

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 19069  bytes 15158348 (15.1 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 19069  bytes 15158348 (15.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

zt6ntmzn2q: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 2800
        inet 172.22.183.227  netmask 255.255.0.0  broadcast 172.22.255.255
        inet6 fe80::8b8:76ff:fe69:b41f  prefixlen 64  scopeid 0x20<link>
        ether 0a:b8:76:69:b4:1f  txqueuelen 1000  (Ethernet)
        RX packets 1408  bytes 152540 (152.5 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 382  bytes 44839 (44.8 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

我ubuntu服务器的IP为192.168.2.227。

设置u-boot的网络信息

setenv ipaddr 192.168.2.230
setenv ethaddr 00:04:9f:04:d2:35
setenv eth1addr 00:04:9f:04:d2:36
setenv gatewayip 192.168.2.1
setenv netmask 255.255.255.0
setenv serverip 192.168.2.227
saveenv

参数含义:
ipaddr:为板子的IP要保证没有被占用。
ethaddr和eth1addr分别是两个网口的MAC地址。
gatewayip:网关地址
netmask:遮掩码
serverip:服务器IP也就是我们上面获取的ubuntu的IP

执行结果

u-boot的网络信息

从TFTP下载内核和根文件

tftp 80800000 zImage 
tftp 83000000 imx6ull-14x14-evk.dtb

执行结果

下载内核和根文件结果

设置启动参数并且启动内核

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.2.227:/home/q123/nfs/rootfs,nfsvers=3,proto=tcp rw ip=192.168.2.230:192.168.2.227:192.168.2.1:255.255.255.0::eth0:off'
saveenv

参数含义:
console=ttymxc0,115200:使用ttymxc0串口设备输出信息,波特率为115200
root=/dev/nfs:根文件挂载nfs文件

nfsroot=192.168.2.227:/home/q123/nfs/rootfs,nfsvers=3,proto=tcp:这个是nfs文件的相关信息。

  1. 192.168.2.227:/home/q123/nfs/rootfs是根文件的服务器地址和目录
  2. nfsvers=3表示使用的NFS版本为V3
  3. proto=tcp表示接口使用TCP。

rw:表示根文件可读可写

ip=192.168.2.230:192.168.2.227:192.168.2.1:255.255.255.0::eth0:off为启动IP设置。
ip=<板子IP>:<服务器IP>:<网关地址>:<遮掩码>::<使用的网口设备(eth0是网口2)>:off

启动内核

bootz 80800000 - 83000000

80800000是上面使用tftp下载内核到的内存地址
83000000是上面使用tftp下载设备树到内存的地址

启动结果

启动结果

默认的登录用户为:root
没有密码

posted @ 2024-05-18 09:57  其实我只是懒  阅读(13)  评论(0编辑  收藏  举报