重温Mini2440(一)U-Boot
- 一. 前言
- 二. 下载U-Boot
- 1. 编译
- 2. 烧录
- 三. 使用U-Boot
- 1. 设置网络地址
- 2. ping命令
- 3. tftp命令
- 4. nfs命令
- 5. nand flash启动
- 四. 屏蔽蜂鸣器
一. 前言
Mini2440所搭载的s3c2440早已停产,但是平台会过时技术不会过时,还是具有一定的学习意义,最后发挥一次这块开发板的余热吧。
U-Boot涉及的技术是裸机开发,实际工作中U-Boot主要是作为工具使用,利用tftp和nfs来下载内核和挂载根文件系统,此篇只记录U-Boot的常用方法,移植后面再研究。
二. 下载U-Boot
1. 编译
此文使用Tekkaman开源的u-boot for mini2440,可到此处下载。
解压后手动编译,需要事先安装交叉编译工具。
make ARCH=arm CROSS_COMPILE=arm-linux- mini2440_config
make ARCH=arm CROSS_COMPILE=arm-linux- all
编译完成后在当前目录生成u-boot.bin
2. 烧录
使用J-Link烧写bin文件到Mini2440的NOR flash
将u-boot.bin写进开发板后,上电后开发板蜂鸣器会响1秒,同时在终端打印数据,在1秒内按下任意按键可以进入命令模式。
U-Boot 2010.03 (5月 07 2021 - 14:09:38)modified by tekkamanninja (tekkamanninja@163.com)Love Linux forever!!I2C: ready
DRAM: 64 MB
Flash: 2 MB
NAND: 256 MiB
Video: 240x320x16 20kHz 62Hz
In: serial
Out: serial
Err: serial
USB slave is enable!
Net: dm9000
U-Boot 2010.03 (5月 07 2021 - 14:09:38)
modified by tekkamanninja
(tekkamanninja@163.com)
Love Linux forever!!
Hit any key to stop autoboot: 0
[u-boot@MINI2440]#
[u-boot@MINI2440]#
三. 使用U-Boot
1. 设置网络地址
根据实际情况设置IP地址
[u-boot@MINI2440]# setenv ipaddr 192.168.15.233
[u-boot@MINI2440]# setenv gatewayip 192.168.15.1
[u-boot@MINI2440]# setenv serverip 192.168.15.230
[u-boot@MINI2440]# setenv netmask 255.255.255.0
[u-boot@MINI2440]# saveenv
Saving Environment to NAND...
Erasing Nand...
Erasing at 0x6000000000002 -- 0% complete.
Writing to Nand... done
[u-boot@MINI2440]# printenv
2. ping命令
尝试ping通服务器(ip地址就是上面设置的serverip)
[u-boot@MINI2440]# ping 192.168.15.230
dm9000 i/o: 0x20000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:08:11:18:12:27
operating at 100M full duplex mode
Using dm9000 device
host 192.168.15.230 is alive
注意:只能u-boot去ping别的机器,别的机器无法ping通u-boot,因为u-boot未作处理
3. tftp命令
要验证u-boot的tftp功能,服务器Linux需要安装tftp服务
1. 安装服务:
sudo apt install tftpd-hpa2. 创建tftp服务目录:
mkdir /home/lps/tftp
chmod 777 /home/lps/tftpvim /etc/default/tftpd-hpa
3. 内容修改为:
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/lps/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"4. 重新启动TFTP服务
sudo service tftpd-hpa restart
然后就可以在u-boot里使用tftp命令下载文件到开发板的内存上,最后写进nand flash
[u-boot@MINI2440]#
tftp 0x30008000 u-boot.bin
nand erase 0 0x60000
nand write 0x30008000 0 0x60000tftp 0x30008000 uImage
nand erase 0x80000 0x500000
nand write 0x30008000 0x80000 0x500000tftp 0x30008000 rootfs.img
nand erase 0x580000 $filesize
nand write.yaffs 0x30008000 0x580000 $filesize
也可以使用tftp方式来加载内核并启动,需要设置u-boot:
[u-boot@MINI2440]#
setenv bootcmd 'tftp 0x30008000 uImage;bootm 0x30008000'
saveenv
4. nfs命令
首先服务器也需要安装nfs服务,可参考此文。
然后u-boot就可以利用nfs命令下载文件,同tftp类似
指令格式为nfs [loadAddress] [[hostIPaddr:]bootfilename]
如果可以下载成功,说明nfs功能已经没有问题,此时设置u-boot启动参数就可以实现nfs加载内核以及挂载根文件系统,IP地址需要区分好客户端ip和服务端ip:
[u-boot@MINI2440]#
setenv bootcmd 'nfs 0x30008000 192.168.15.230:/home/lps/rootfs/uImage;bootm'
setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.15.230:/home/lps/rootfs,nolock ip=192.168.15.233:192.168.15.230:192.168.15.1:255.255.255.0:mini2440:eth0:off console=ttySAC0,115200 init=/linuxrc
saveenv
5. nand flash启动
如果不想利用网络方式启动内核和挂载根文件系统,则需要u-boot设置启动参数:
[u-boot@MINI2440]#
setenv bootcmd 'nand read 0x30008000 0x80000 0x500000;bootm 0x30008000'
setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200
需要确保nand flash已经成功烧写上内核和根文件系统镜像,如果有出现坏块或者文件系统无法挂载,可以尝试格式化nand flash后再重新烧写
[u-boot@MINI2440]# nand scrub
四. 屏蔽蜂鸣器
此版本u-boot在每次上电蜂鸣器都会响一小会,开发板的蜂鸣器控制引脚是GPB0,如果要让u-boot安静启动,只需要更改GPBDAT寄存器相关代码即可
- board/tekkamanninja/mini2440/mini2440.c
168 #if defined(CONFIG_MINI2440_LED)
169 gpio->GPBDAT = 0x00000180; //禁止蜂鸣器 0x00000181->0x00000180
170 #endif
- lib_arm/board.c
145 #if defined(CONFIG_MINI2440_LED)
146 struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio();
147 writel(0x100, &gpio->GPBDAT); //禁止蜂鸣器 0x101->0x100
148 #endif