u-boot-2010.03在LT2440上的移植详解 (五)
郑重声明,这系列文章改写自博客园 黄刚先生的《嵌入式Linux之我行——u-boot-2009.08在2440上的移植详解》
转载时请注明出处
文章出处:http://www.lt-net.cn
编译系统 | Ubuntu10.04 |
交叉编译器 | arm-linux-gcc 4.3.3 |
硬件设备 | LT2440开发板 |
测试软件 | u-boot-2010.03 |
依赖库 | 无 |
uboot下载地址:http://ftp.denx.de/pub/u-boot/u-boot-2010.03.tar.bz2
本次移植在u-boot-2010.03原有功能的基础上增加如下特性:
1.支持2KB page Nand Flash读写
2.支持Nand/Nor Flash启动自动识别
3.支持DM9000AEP 10M/100M自适应网卡
4.支持yaffs文件系统烧写
5.支持USB下载功能
6.支持一键式菜单
7.支持启动Logo
8.支持ubifs(待续)
上接:u-boot-2010.03在LT2440上的移植详解 (四)
支持u-boot通过网络下载linux内核,以及u-boot设置linux启动参数,并启动内核
上一节我们已经调试好了DM9000AEP网卡,接下来我们增加u-boot启动linux的所需参数
修改lt2440.h文件,增加相应宏定义即可
# gedit include/configs/lt2440.h |
#define CONFIG_SETUP_MEMORY_TAGS 1 //内存标签设置 #define CONFIG_CMDLINE_TAG |
重新编译u-boot,下载到NandFlash,主机使用Tftpd32.exe 传输文件,这个文件在/光盘资料/windows下工具软件及驱动/Tftpd32目录下,将linux内核文件拷贝到这个目录,打开开发板,使用printenv命令查看设置的开发板IP地址和主机IP地址是否得当。我如不对可以使用setenv命令设置环境变量,格式为:
setenv serverip 192.168.1.10
接下来我们打开Tftpd32.exe
在超级终端输入
t uimage43 //uimage43为内核名字
然后就可以看到网络的数据在传输了,数据可以传输完,但是我们可以看到有丢包,还有速度比较慢
我们可以使用bootm命令启动SDRAM里面的linux内核
bootm
发现内核已经启动了。过程如下
LT2440 # t uimage43
dm9000 i/o: 0x18000300, id: 0x90000a46
DM9000: running in 16 bit mode
MAC: 08:00:3e:26:0a:5b
Using dm9000 device
TFTP from server 192.168.1.10; our IP address is 192.168.1.66
Filename 'uimage43'.
Load address: 0x33000000
Loading: T ################################################################################################################################## ######################
done
Bytes transferred = 2223636 (21ee14 hex)
LT2440 # bootm 33000000
## Booting kernel from Legacy Image at 33000000 ...
Image Name: Linux-2.6.33.6
Created: 2010-11-03 6:23:46 UTC
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 2223572 Bytes = 2.1 MB
Load Address: 30008000
Entry Point: 30008000
Verifying Checksum ... OK
Loading Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.6 (pk@TFTech) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-
203) ) #10 Wed Nov 3 14:23:19 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177
CPU: VIVT data cache, VIVT instruction cache
Machine: SMDK2410
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, Copyright 2004 Simtec Electronics
S3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
# gedit net/tftp.c |
#define TIMEOUT 5000 /* Millisecs to timeout for lost pkt */ //14行 /*#ifdef CONFIG_TFTP_BLOCKSIZE //101行 #define TFTP_MTU_BLOCKSIZE CONFIG_TFTP_BLOCKSIZE #else */ #define TFTP_MTU_BLOCKSIZE 1460
|
|
# define ARP_TIMEOUT 5 /* Milliseconds before trying ARP again */ //102 行 if (NetArpWaitTry >= ARP_TIMEOUT_COUNT*CONFIG_SYS_HZ) { //266行 NetSetTimeout (10*CONFIG_SYS_HZ, startAgainTimeout); //587行 NetSetTimeout (10*CONFIG_SYS_HZ, startAgainTimeout); //598行 NetSetTimeout (10*CONFIG_SYS_HZ, PingTimeout); //768行 #define CDP_TIMEOUT CONFIG_SYS_HZ/4 /* one packet every 250ms */ //791行 |
修改系统HZ定义
|
#undef CONFIG_SYS_CLKS_IN_HZ /* everything, incl board info, in Hz */
#define CONFIG_SYS_HZ 1562500 |
这样网络模块传输就正常了
从上面的内核启动过程中可以发现Machine: SMDK2410这个不是我们的机器,需要修改u-boot,修改启动参数使之适合我们机器
首先,确定u-boot中的MACH_TYPE。在u-boot的include/asm-arm/mach-types.h文件中针对不同的CPU定义了非常多的MACH_TYPE,可以找到下面这个定义:
// #define MACH_TYPE_SMDK2440 1008 //针对2440的MACH_TYPE码的值定义为1008,在1013行 // 我们修改为: #define MACH_TYPE_LT2440 362 |
那么我们就修改u-boot的MACH_TYPE代码引用部分,确定u-boot的MACH_TYPE。如下:
#gedit board/samsung/lt2440/lt2440.c //修改board_init函数 |
/* arch number of SMDK2410-Board */ |
重新编译u-boot ,烧写后,再次启动内核:
Starting kernel ...
Uncompressing Linux... done, booting the kernel.
Linux version 2.6.33.6 ( pk@TFTech) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-
203) ) #10 Wed Nov 3 14:23:19 CST 2010
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=00007177
CPU: VIVT data cache, VIVT instruction cache
Machine: LT2440
Memory policy: ECC disabled, Data cache writeback
CPU S3C2440A (id 0x32440001)
S3C24XX Clocks, Copyright 2004 Simtec Electronics
S3C244X: core 400.000 MHz, memory 100.000 MHz, peripheral 50.000 MHz
CLOCK: Slow mode (1.500 MHz), fast, MPLL on, UPLL on
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 16256
发现板子ID已经修改正确
下接: u-boot-2010.03在LT2440上的移植详解 (六)