开发板:友善之臂Tiny6410
宿主机:Ubuntu 11.10
一. 使用的是linux-3.2.10,源码部署在/usr/src/linux-3.2.10
二.进入目录
make distclean
三.选择参考配置文件。用适合于4.3寸屏的config_mini6410_n43,又是通用。
make menuconfig ARCH=armCROSS_COMPILE=arm-linux-
ARCH=arm:表示现在编译的是arm架构的内核
CROSS_COMPILE=arm-linux- :表示使用的工具链是交叉编译工具链。
使用默认的配置就可以了。
四.编译内核
make uImage ARCH=armCROSS_COMPILE=arm-linux-
PS:1.如果系统中没有安装mkimage工具,在编译中会提示mkimage命令找不到。u-boot中mkimage是用来产生u-boot格式映像文件的,所以从编译之后的u-boot源代码中把mkimage复制到/usr/local/bin下。
编译需要十几分钟,生成的uImage位于arch/arm/boot下。
2. 需要把 FriendlyARM公司的一个FriendlyARM.cpio脚本复制到内核目录的/scripts下。
五.Uboot命令
可以参考:http://blog.sina.com.cn/s/blog_80fd855d0100ysfn.html
这里用到了:
1.go:
go addr [arg ...]
go命令可以执行应用程序。
第1个参数是要执行程序的入口地址。
第2个可选参数是传递给程序的参数,可以不用。
2、bootm
bootm [addr [arg ...]]
bootm命令可以引导启动存储在内存中的程序映像。这些内存包括RAM和可以永久保存的Flash。
第1个参数addr是程序映像的地址,这个程序映像必须转换成U-Boot的格式。
第2个参数对于引导Linux内核有用,通常作为U-Boot格式的RAMDISK映像存储地址;也可以是传递给Linux内核的参数(缺省情况下传递bootargs环境变量给内核)。
附加说明: 要求二进制代码为制定格式的。通常为mkimage处理过的二进制文件。起动UBOOTTOOLS制作的压缩LINUX内核, bootm 3200000
3、bootp
bootp [loadAddress] [bootfilename]
bootp命令通过bootp请求,要求DHCP服务器分配IP地址,然后通过TFTP协议下载指定的文件到内存。
第1个参数是下载文件存放的内存地址。
第2个参数是要下载的文件名称,这个文件应该在开发主机上准备好。
附加说明: 通过网络启动,需要提前设置好硬件地址bdinfo打印ARM相关信息
4、tftpboot
tftpboot [loadAddress] [bootfilename]
tftpboot命令可以使用TFTP协议通过网络下载文件。按照二进制文件格式下载。另外使用这个命令,必须配置好相关的环境变量。例如serverip和ipaddr。
第1个参数loadAddress是下载到的内存地址。
第2个参数是要下载的文件名称,必须放在TFTP服务器相应的目录下。
5、nfs
nfs [loadAddress] [host ip addr:bootfilename]
nfs命令可以使用NFS网络协议通过网络启动映像。
用法:
nfs 32000000 192.168.0.2:aa.txt
把192.168.0.2(LINUX 的NFS文件系统)中的NFS文件系统中的aa.txt读入内存0x32000000处。
6、echo
echo [args..]
echo命令回显参数。
用法:echo $( bootcmd)
7、printenv
printenv
printenv name ...
printenv命令打印环境变量。
可以打印全部环境变量,也可以只打印参数中列出的环境变量。
8、setenv
setenv name value ...
setenv name
setenv命令可以设置环境变量。
第1个参数是环境变量的名称。
第2个参数是要设置的值,如果没有第2个参数,表示删除这个环境变量。
用法:
Uboot> setenv myboard AT91RM9200DK
Uboot> printenv
baudrate=115200
ipaddr=192.168.1.1
ethaddr=12:34:56:78:9A:BC
serverip=192.168.1.5
myboard=AT91RM9200DK
Environment size: 102/8188 bytes
9、Saveenv
保存环境变量
命令将当前定义的所有的变量及其值存入flash中。用来存储变量及其值的空间只有8k字节,应不要超过。
10、run
run var [...]
run命令可以执行环境变量中的命令,后面参数可以跟几个环境变量名。
用法:
Uboot> setenv flashit tftp 20000000 mycode.bin\;erase 10020000 1002FFFF\;
cp.b 20000000 10020000 8000
Uboot> saveenv
Uboot> run flashit
11、ping
ping ipaddr
只能开发板PING主机。
六、用nimicom 串口工具进入一键式菜单界面,按 q 退出一键式菜单,进入u-boot的命令行模式。
nimicom的使用参考:http://blog.sina.com.cn/s/blog_80fd855d0100ysdi.html
七、测试环境变量
设置tmp=test env :setenv tmptest env
打印 :printenv tmp
保存 :saveenv
删除 :setenv tmp
八、设置环境变量
MINI6410 #printenv
bootargs=root=ubi0:FriendlyARM-root ubi.mtd=2rootfstype=ubifs init=/linuxrc c0
bootcmd=nand read.i c0008000 80000 500000;bootmc0008000
bootdelay=1
baudrate=115200
ethaddr=08:90:90:90:90:90
ipaddr=192.168.1.230
gatewayip=192.168.1.1
netmask=255.255.255.0
stdin=serial
stdout=serial
stderr=serial
serverip=192.168.1.100
九、连接网线,通过路由连接。PING路由和主机。
MINI6410 # ping192.168.1.1dm9000 i/o: 0x18000300, id:0x90000a46
DM9000: running in 16 bitmode
MAC:08:90:90:90:90:90
operating at 100M full duplexmode
host 192.168.1.1 isalive
MINI6410 # ping192.168.1.100
dm9000 i/o: 0x18000300, id:0x90000a46
DM9000: running in 16 bitmode
MAC:08:90:90:90:90:90
operating at 100M full duplexmode
host 192.168.1.100 isalive
MINI6410 #
十、使用tftp下载内核到内存51000000处启动
将uImage复制到 /tftp目录中,重命名为uImage.bin。
MINI6410 # tftp 51000000uImage.bin
dm9000 i/o: 0x18000300, id:0x90000a46
DM9000: running in 16 bitmode
MAC:08:90:90:90:90:90
operating at 100M full duplexmode
TFTP from server 192.168.1.100; our IP address is192.168.1.230
Filename'uImage.bin'.
Load address:0x51000000
Loading:#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
#################################################################
##############################################################
done
Bytes transferred = 3645072 (379e90hex)
MINI6410 # bootm51000000
## Booting image at 51000000...
ImageName: Linux-3.2.10-MyKernel
ImageType: ARM Linux Kernel Image(uncompressed)
DataSize: 3645008Bytes = 3.5MB
Load Address:50008000
Entry Point: 50008000
Verifying Checksum ...OK
OK
Starting kernel ...
由于此时u-boot中还没有设置对挂载文件系统的支持,所以内核启动最终会被挂起。
至此,这一节就算完成了。
夜把花悄悄地开放了,却让白日去领受谢词。 ——泰戈尔