linux启动minicom
sudo minicom -con
进入minicom界面:
打开单片机
在打开之后,我们通过
printenv
查看环境配置
在修改配置之前,我们最好先将环境初始化一下,初始化代码为
nand erase.chip
u-boot的常用命令
尽管u-boot是一个裸机程序,但功能却一点也不简单。
u-boot支持的命令可用help命令打印。下面介绍一些常用命令。
内存命令:
内存查看命令md [.b, .w, .l] address [# of objects]
内存修改命令(地址不自增) nm [.b, .w, .l] address
内存修改命令(地址自增) mm [.b, .w, .l] address
内存拷贝命令 cp [.b, .w, .l] source target count从source拷贝count个单元到target
nand-flash常用命令:
nand-flash信息 nand info
nand-flash坏块信息 nand bad
nand dump[.oob] off - dump page 打印出从off处开始的 dump page 页的数据
nand erase.chip nand-flash整片擦除
u-boot的环境变量相关的命令
之前提到过u-boot的一个功能是能够设置、保存一些参数。这些参数无论是u-boot本身还是引导linux操作系统都是至关重要的。这些参数被称之为环境变量,和linux系统、windows系统所说的环境变量类似。
可以使用printenv命令打印出所有的环境变量,可以看出环境变量都是一些键值对。这里键值全是文本,或者简单认为就是字符串。键值对中的键被称之为变量名,值被称之为变量的值。
我们可以随意添加一个环境变量,设置新的环境变量使用setenv命令如:setenv myarg ‘hello world’
也可以修改一个环境变量,只需对原有的环境变量重新赋值就行。如:setenv myarg ‘hello 2440’
如果要删除一个环境变量只需将值设置为“空”就行。如:setenv myarg
每个环境变量都有各自不同的作用,如bootdelay是指u-boot启动后等待的时间,超时后将会自动加载linux内核并尝试启动内核。可需要注意的是修改环境变量之后要保存,保存就是把参数写入到nand-flash中去。用saveenv保存对环境变量的修改。
u-boot提供了常用的网络协议,接下来我们用的最多的就是tftp协议。因为我们需要通过该协议从电脑上下载linux内核程序,但是要使用tftp,就需要我们配置好网络相关的环境变量。他们包括:
- netmask子网掩码
- ethaddr 以太网mac地址
- serverip tftp服务器ip地址
- ipaddr mini2440ip地址
必须按照实际情况配置这些参数,保存后重启开发板,并用ping命令测试。这个ping命令只能开发板ping电脑。
u-boot最常用的网络命令tftp
要使用tftp网络协议,我们首先需要把ipaddr跟自己虚拟机上的地址设置在同一个段上
随后我们就可以ping一下,看是否能连通
alive说明已经连通
u-boot用tftp下载linux内核并启动linux
u-boot是一种引导程序,我们目的是要启动linux系统。既然u-boot可以使用tftp来下载任意文件,那么就可以使用tftp下载编译好的linux内核文件到mini2440中,并让mini2440引导linux系统。
- 复制已经编译好的linux内核文件uImage到tftp根目录。
- 用tftp命令下载这个文件到开发板:tftp 0x30008000 uImag
- 下载完成后使用u-boot命令bootm 0x30008000启动linux操作系统;
启动内核:
此时已经启动成功!
若启动不成功,则说明缺少根文件系统
我们创建一个文件:nfs
nfs挂载
NFS(Network File System)是一种用于分布式文件系统的协议,它允许计算机用户或者操作系统通过网络以NFS客户端形式访问远程服务器上的文件。
nfs/根文件系统
linux内核启动以后会自动去挂载根文件系统。
那么什么是根文件系统?注意这里千万不要把根文件系统和fat,fat32,nfs……文件系统混为一谈。这里的根文件系统其实指的是一个文件夹,这个文件夹其实就是linux的系统根目录。
这个就是ubuntu系统根目录,也是根文件系统:
首先第一个问题是这个根文件系统放哪?按照裸机,ubuntu的根文件系统是保存在硬盘上的,那么自然mini2440的根文件系统就应该在mini2440的硬盘nand-flash上。但是为了之后我从电脑上向mini2440传递文件方便,在开发阶段我们一把都使用nfs,网络文件系统;
按照一般的方法,根文件系统的制作需要使用专门的工具软件busy-box。其实就是创建一堆文件夹,并编译常用的命令进去。这里我们使用已经编译好的根文件系统rootfs111.tar。我们直接把这个压缩文件在nfs服务器文件夹中解压缩即可。
查看自己是否安装nfs:
说明nfs服务端正常工作,之后我们还需要配置一个跟nfs相关的一个重要配置:
sudo vi /etc/exports
我们需要在nfs里面放置根文件系统
这段系统就是给2440用的。
如何让mini2440知道我们的根文件系统是在nfs服务器上,并让linux自动去挂载呢?这个需要通过一个u-boot的环境变量来设置。
u-boot的bootargs环境变量
u-boot的bootargs环境变量是一个非常重要的环境变量,该环境变量并不是给u-boot自己用的,这个环境变量在bootm时传递给linux内核,使linux内核清楚应该去哪里找根文件系统
一个设置nfs根文件系统的例子如下:
setenv bootargs `root=/dev/nfs
nfsroot=192.168.1.100:/home/linux/nfs/rootfs ip=192.168.1.17
console=ttySAC0,115200 init=/linuxrc`
主要成员
含义如下:
- root=/dev/nfs 表示根文件系统是nfs即网络文件系统,如果使用nand-flash作为根文件系统载体,则root=/dev/mtdblockx
- nfsroot=192.168.1.100:/home/linux/nfs/rootfs 表示网络文件系统挂载的具体位置
- ip=192.168.1.17 linux启动以后的ip地址
- console=ttySAC0,115200 linux系统启动以后控制台是串口0,波特率115200
- init=/linuxrc linux系统启动后的第一个进程在根文件系统中的位置
这个过程如果每次都是手动操作的话过于繁琐,我们可以设置bootcmd环境变量来让系统自动执行这个过程。
如果把上面的过程设置到bootcmd中去的话可以:
setenv bootcmd ‘tftp 0x30008000 uImage;bootm 0x30008000’
可以看出bootcmd变量类似一个脚本,里面就放了两个命令,分别就是下载和启动命令。
保存配置后重启开发板,启动后不要输入任何东西,系统在倒计时结束后自动运行bootcmd
如果已经进入u-boot命令行,可以用run bootcmd执行启动命令
这样子就可以进入终端了
nfs打开不成功
sudo vi /etc/default/nfs-kernel-server
在最后一行加上:
RPCNFSDOPTS="--nfs-version 2,3,4 --debug --syslog" //版本
完后重启即可