Linux系统

您所在的位置:网站首页 linux挂载emmc Linux系统

Linux系统

2023-11-09 06:34| 来源: 网络整理| 查看: 265

tftp下载zImage、nfs 挂载根文件系统 1. nsf、tftp 安装和配置1.1 nsf1.2 tftp 2. uboot 环境变量配置2.1 设置IP2.2 设置bootcmd (tftp下载zImage和设备树)2.3 设置bootargs (从nfs 挂载根文件系统) 3. 过程梳理

在这里插入图片描述

所有的热爱都要不遗余力,真正喜欢它便给它更高的优先级,和更多的时间吧!

Linux系统&驱动其它文章:     Linux

本文为《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.1》 中学习笔记

为了方便调试,一般通过网络方式启动 Linux,如果每次修改 Linux 系统文件或者 linux 下的某个驱动以后都要将其烧写到 EMMC 中去测试,这样太麻烦;

只需将 linux 镜像文件和根文件系统都放到 Ubuntu 下,这样每次重新编译 linux 内核或者某个 linux 驱动,只需 cp 将其拷贝到这个指定的文件夹中即可;

tftp 从 Ubuntu 中下载 zImage 和设备树文件,通过 nsf 挂载根文件系统;

首先应对 nsf 和 tftp 进行安装配置:

1. nsf、tftp 安装和配置

配置工作基本分四步:

安装 指定服务器目录 配置文件 重启 1.1 nsf

一般Linux 驱动在开发中通过 nfs(Network File System) 挂载根文件系统,当产品最终上市开卖的时候才会将根文件系统烧写到 EMMC 或者 NAND 中。

① 安装 NFS 服务:

sudo apt-get install nfs-kernel-server rpcbind

② 在 linux 下 创建nfs 文件夹供 nfs 服务器使用:

mkdir /home/chunn/linux/nfs

③ 修改nfs配置文件:

sudo vi /etc/exports

在最后添加: /home/chunn/linux/nfs *(rw,sync,no_root_squash)在这里插入图片描述 ④ 重启 NFS 服务,使用命令如下:

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

⑤ 检查nfs服务器中挂载的目录。

showmount -e

配置到此结束,接下来就是在nfs目录下构件根目录系统。

PS: 博主之前只想快速开发驱动,而忽略nfs的配置,检查挂载的目录时: 在这里插入图片描述 本文ubuntu系统使用的正点原子提供的镜像文件,所以默认还是 alientek 的用户名,从而引起内核恐慌,始终挂载失败~

1.2 tftp

tftp(Trivial File Transfer Protocol) 命令的作用和 nfs 命令一样,都是用于通过网络下载东西到 DRAM 中,只是 tftp 命令使用的 TFTP 协议,Ubuntu 主机作为 TFTP 服务器。

① 安装:

sudo apt-get install tftp-hpa tftpd-hpa sudo apt-get install xinetd

② 在 linux 下 创建 tftp 文件夹供 tftp 服务器使用, 并给权限:

mkdir /home/chunn/linux/tftpboot chmod 777 /home/chunn/linux/tftpboot

③ 修改 tftp 的配置文件:

sudo vi /etc/xinetd.d/tftp # /etc/xinetd.d/tftp server tftp { socket_type = dgram #socket的链接类型是dgram(UDP) protocol = udp #UDP协议 wait = yes #等待到启动完成 disable = no #yes表示TFTP服务器是关闭的;no表示启动TFTP服务器 user = root #指定root用户启动服务进程 server = /usr/sbin/in.tftpd #指定服务进程是/usr/sbin/in.tftpd server_args = -s /home/chunn/linux/tftp -c #指定传给该进程的参数(确定目录) #log_on_success += PID HOST DURATION #log_on_failure += HOST per_source = 11 #表示每一个ip地址上最多可以建立的实例数目 cps =100 2 #表示每秒100个入站链接,如果超过限制,则等待2秒 flags =IPv4 #IPv4网络 }

④ 修改tftp-hpa 的配置文件:

sudo vi /etc/default/tftpd-hpa # /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/home/chunn/linux/tftp" #TFTP服务器的目录设置 TFTP_ADDRESS=":69" #ip地址和端口号 TFTP_OPTIONS="--secure"

⑤ 重启tftp

sudo service tftpd-hpa restart

配置到此结束,还需要把zImage拷贝到 tftp中目录,并下载

2. uboot 环境变量配置

使用SecureCRT进入uboot, 输入uboot 指令进行网络环境变量设置

2.1 设置IP setenv ethaddr 00:04:9f:04:d2:35 //硬件地址 setenv gatewayip 192.168.1.1 //网关 setenv ipaddr 192.168.1.103 //开发板的IP地址 setenv netmask 255.255.255.0 //子网掩码 setenv serverip 192.168.1.102 //Ubuntu的IP地址(可以通过ifconfig查询) saveenv //保存环境变量 2.2 设置bootcmd (tftp下载zImage和设备树)

bootcmd: 其名分为 “boot” 和 “cmd”,也就是“引导”和“命令”,其实就是启动的命令集合, 如下为使用 tftp 从网络启动 Linux(验证通过的):

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000' saveenv

● bootcmd 设置的内容:

1) tftp 80800000 zImage : (tftpboot [loadAddress] [[hostIPaddr:]bootfilename] ) 将 tftpboot 文件夹里面的 zImage 文件下载到DRAM的0X80800000地址处; 2) tftp 83000000 imx6ull-alientek-emmc.dtb; 将设备树imx6ull-14x14-emmc-7-1024x600-c.dtb 下载到 DRAM 中的 0X83000000 地址处 3) bootz 80800000 - 83000000 使用命令 bootz 启动

● 指令:

setenv bootcmd : 设置bootcmd 变量,后续有空格,所以加上引号 saveenv : 保存环境变量

● 注意:

1) Ubuntu 中创建 tftpboot 目录的时需要给予 tftboot 相应的权限。 2) tftpboot 目录中要下载的文件没有给予相应的权限 使用命令“chmod 777 xxx”来给予权限,其中“xxx”就是要给予权限的文件或文件夹 2.3 设置bootargs (从nfs 挂载根文件系统)

bootargs 保存着 uboot 传递给 Linux 内核的参数,主要用来告诉内核分区信息和根文件系统所在的分区等

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.0.102:/home/chunn/linux/nfs/rootfs ip=192.168.0.103:192.168.0.102:192.168.0.1:255.255.255.0::eth0:off' saveenv

● nfs 挂载的 bootargs 格式如下:

root=/dev/nfs nfsroot=[:][,] ip=:::::::: :服务器 IP 地址,也就是存放根文件系统主机的 IP 地址,那就是 Ubuntu 的 IP 地址,比如我的 Ubuntu 主机 IP 地址为 192.168.0.102。 :根文件系统的存放路径,比如我的就是/home/chunn/linux/nfs/rootfs。 :NFS 的其他可选选项,一般不设置。 :开发板的 IP 地址,Linux 内核启动以后就会使用此 IP 地址来配置开发板。此地址一定要和 Ubuntu 主机在同一个网段内,在 Ubuntu 中使用 ping 命令 ping 一下就知道要设置的 IP 地址有没有被使用,如果不能 ping 通就说明没有被使用,那么就可以设置为开发板的 IP 地址,比如我就可以设置为 192.168.0.103。 :服务器 IP 地址,前面已经说了。 :网关地址,我的就是 192.168.0.1。 :子网掩码,我的就是 255.255.255.0。 :客户机的名字,一般不设置,此值可以空着。 :设备名,也就是网卡名,一般是 eth0,eth1….,正点原子的 I.MX6U-ALPHA 开发板的 ENET2 为 eth0,ENET1 为 eth1。如果你的电脑只有一个网卡,那么基本只能是 eth0。 这里我们使用 ENET2,所以网卡名就是 eth0。 :自动配置,一般不使用,所以设置为 off。 :DNS0 服务器 IP 地址,不使用。 :DNS1 服务器 IP 地址,不使用。

其它解释:

1)console=ttymxc0,115200 :ttymxc0(也就是串口 1)作为 Linux 的终端,并且串口波特率设置为 115200 2)“rw” : 表示 nfs 挂载的根文件系统为可读可写。 3. 过程梳理

1)在ubuntu 中 配置好nsf、tftp服务,关键步骤:

sudo vi /etc/exports //nfs配置 sudo vi /etc/xinetd.d/tftp //tft配置 sudo vi /etc/default/tftpd-hpa //tftpd-hpa配置

2)/home/chunn/linux/tftp 文件夹下准备好 imx6ull-alientek-emmc.dtb 设备树、zImage 内核镜像;/home/chunn/linux/nfs 文件夹下准备好rootfs 根文件系统

3)设置 uboot 的IP环境变量:

setenv ethaddr 00:04:9f:04:d2:35 //硬件地址 setenv gatewayip 192.168.1.1 //网关 setenv ipaddr 192.168.1.103 //开发板的IP地址 setenv netmask 255.255.255.0 //子网掩码 setenv serverip 192.168.1.102 //Ubuntu的IP地址(可以通过ifconfig查询) saveenv //保存环境变量

4)设置 uboot 的 bootcmd 和 bootargs 环境变量 :

setenv bootcmd 'tftp 80800000 zImage; tftp 83000000 imx6ull-alientek-emmc.dtb; bootz 80800000 - 83000000' setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs rw nfsroot=192.168.0.102:/home/chunn/linux/nfs/rootfs ip=192.168.0.103:192.168.0.102:192.168.0.1:255.255.255.0::eth0:off' saveenv

最后终于进入熟悉的根文件系统: 在这里插入图片描述

Linux系统&驱动其它文章:     Linux



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3