分类: LINUX
2008-12-06 10:40:05
一、ARM9+LINUX开发历程
芯片选型——使用DXP画原理图(如果有可能买块开发板可以极快加快进度)——使用DXP画PCB图——芯片购买/PCB投板生产——芯片焊接——使用ADS编写简单硬件测试程序,调试硬件——搭建LINUX服务器,在服务器建立交叉编译环境——利用服务器和本机超级终端开发U-BOOT-1.3.4——利用U-BOOT-1.3.4的以太网FTP功能和服务器移植开发LINUX-2.6.26 内核——开发文件系统——开发驱动程序——应用程序开发,项目完基本成后回过头来想就是这个一个过程,中间走了不少弯路,在本博客中都有记载,很多问题有的也没有来得及记。
说干就干,时间安排如下:
(1)5~7月硬件设计(芯片,型号,预测价格),已初步完成
CPU:AT91RM9200,81
SDRAM:MT48LC16M16A2TG-75IT(两片32MB*2) 74*2
FLASH:S29GL256N10TAI010(NOR型,32MB,存代码,写慢读快)57.52
FLASH∶K9F2G08U0B(NAND256MB,预留存测试数据,写快读慢)41.1
铁电存储器:FM24CL64(代替EEPROM24LC65,8KB)8.29
以太网物理层控制器:DM9161E(100M/10M自适应)9.4
从USB接口:用于与PC机通信
主USB接口:用于后续移植LINUX时软件更新
触摸屏驱动器:TSC2046(预留)
液晶显示屏模块-TFT液晶显示接口(预留)
(2)ADS+AXD+J-LINK调试过程
(3)硬件调试过程
(3)U-BOOT的移植
修改Makefile文件中以下部分:
ifeq ($(ARCH),arm)
CROSS_COMPILE = arm-unknown-linux-gnueabi-
endif
修改include〉configs〉at91rm9200dk.h(修改配置,主要是SDRAM的大小,NORFLASH的信息)
修改board>atmel>at91rm9200dk>at91rm9200dk.c(主要修改片选及NANDFLASH的引脚配置)
make distclean
make clean
make at91rm9200dk_config
(4) U-BOOT的下载固化
1、将loader.bin通过超级终端下载到板子中,使用XMODEN协议,下载完继续出现CCCCC
2、继续在超级终端使用XMODEN协议下载U-BOOT.bin到板子中,出现以下内容:
Loader 1.0 (Mar
XMODEM: Download U-BOOT (to address 20F00
CCCCCCCCCC
U-Boot downloaded successfully
U-Boot 1.3.4 (Sep 22 2008 - 13:46:33)
DRAM:
Spansion: S29GL256N (32M Byte)
Flash: 32 MB
NAND:
*** Warning - bad CRC, using default environment
SSC 510T-Boot>
至此,U-BOOT已经在板子中正常运行起来。将U-BOOT和BOOT.bin固化到板子中(U-BOOT的FLASH驱动此前已经修改完成,有时间再另写)
SSC 510T-Boot> protect off all (去掉FLASH写保护功能)
SSC 510T-Boot> erase 1:0
SSC 510T-Boot> loadb 0x21000000
SSC 510T-Boot> cp.b 0x21000000 0x10000000 0x5000 (将BOOT.BIN固化到FLASH中)
SSC 510T-Boot> loadb 0x22000000
SSC 510T-Boot> cp.b 0x22000000 0x10010000 0xFFFF (将U-BOOT.BIN.TAR固化到FLASH中)
SSC 510T-Boot> protect on all
但是发现boot.bin只能执行到下面:
**Welcome to ATMEL AT91RM9200**
*******************************
WFG: Bootloader 2
BOOT 1.0 (Sep 25 2008 - 12:40:29)
Uncompressing image...
由于无法进行源码级调试,只能将调试信息发到超级终端了.逐步证明makecrc()函数没有问题,问题出现在gunzip()函数上的magic[0] = (unsigned char)get_byte()此语句中.想象可能跟编译时出现了-mshort-load-bytes错误有关,为了编译通过我去掉了该选项,导致了CPU在以字(16位)组织的FLASH中按字节(8位)读取时出现了错误,估计可能是类似于M68K系列CPU的双总线错误差不多.折腾了两天才解决此问题.
原来我使用了4.2版本的编译器编译U-BOOT-1.3.4和内核,都没有出什么错误,就想当然用它来编译BOOT,结果发生了cc1: error: unrecognized command line option "-mshort-load-bytes"错误,在网上查找,试图使用-malignment-traps来代替也不行.后来找了个3.2版本的编译器编译通过却发射了如我其他帖子所描述那样的无法BOOT的过程.在网上反复查找,确定BOOT只能用cross-2.95.3的编译器来编译.事实证明确实如此,将编译好的boot.bin和u-boot.bin.gz烧到FLASH中去后,我FLASH使用S29GL256N,正常启动!启动画面如下:
Loading: T T T T ************************
**Welcome to ATMEL AT91RM9200**
*******************************
WFG: Bootloader 2
BOOT 1.0 (Sep 25 2008 - 12:40:29)