2008年11月25日星期二

Cirrus EP9302: 从RedBoot到Linux

Cirrus EP9302

Cirrus Logic是美国德州的一家半导体制造商,早在1989年就进入NASDAQ,股票代码是CRUS。
EP93xx是基于ARM920T的主板系列,在官方上你可以看到详尽的EP9302资料。

http://www.cirrus.com/en/products/pro/detail/P1066.html

EP9302和EP9301最大的区别就在于,CPU核心加入了一个浮点运算部件MaverickCrunch。

我在开始的时候曾经说过,eCos支持非常多的架构,包括ARM, CalmRISC, FR-V, H8,
IA32, M68K, Matsushita AM3x, MIPS, NEC V8xx, PowerPC, SPARC, SuperH。这是eCos非
常值得骄傲的一点,也充分发挥了开源的长处。但是毕竟世界上的主板千千万,从汽车到蓝
牙,无线设备等等等等,eCos开发小组也无法支持所有的主板。如果厂商新推出一个主板,
那多半需要自己拓展eCos来支持自己的新板,我所使用的Cirrus Logic就是一个例子。

你可以在官方网站上找到这些工具:

搭建工作环境

(此工作环境是在Red Hat Linux 9.0下配置完成,嵌入式开发普遍需要串口支持。)

  1. 解压arm-elf-gcc-3.2.1-full.tar.bz2得到两个目录,按照目录指引放置文件
  2. 在/etc/profile或者~/.bashrc中添加系统环境变量。比如 /etc/profile
    if [ `id -u` = 0]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
    #newly added for arm-3.4
    pathmunge /usr/local/arm/3.4/bin
    fi

配置安装redboot

这步会非常简单。Cirrus几乎把一切工作都做好了,解压cirrus-arm-linux-2.0.8.tar.bz2
进入目录 cirrus-arm-linux-2.0.8/edb9302,直接编译

cd /path/to/cirrus-arm-linux-2.0.8/edb9302
make redboot

然后得到cirrus-arm-linux-2.0.8/edb9302/images/redboot.bin,这就是一个redboot内核,
他使用了ecos的redboot模板,创建针对EP9302主板的ecos内核。安装也是比较方便,这使
用到了cirrus给的download工具(如果没有,你还需要编译):

../download/download -p 1 images/redboot.bin

通常情况下,我们的主板都是不允许FLASH被任意擦写的,这个规定在硬件上被强制实现:
用短路块连接EP9302的JP14的2、3脚。相反接到1、2脚,这个时候Flash会根据写入的协议
向外发布数据,待download侦测到数据时候会进行握手和数据传递。

然后关闭主板,进入EP9302,则可以进入Redboot命令行。

编译烧录linux

# busybox config
cd /path/to/cirrus-arm-linux-2.0.8
tar jxf tarballs/busybox-1.1.3.tar.bz2
cd busybox
make menuconfig

# compile ramdisk.gz
cd /path/to/cirrus-arm-linux-2.0.8/edb9302
make ramdisk

# compile linux zImage
make linuxconfig
make linux
这样就在/path/to/cirrus-arm-linux-2.0.8/edb9302/images中生成两个文件:
ramdisk.gz和zImage。

其中busybox和linux都需要对自己需求的理解来进行配置,在这里不再赘述。这里将一下
linux拷贝方法。将Linux内核传递给EP9302,是使用到了tftp(Trival FTP),首先需要配置
Red Hat 9.0主机的tftp客户端(/etc/xinetd.d/tftp),tftp常常用于无盘工作站。在这
里作为RH和EP9302的通讯协议。

然后进入EP9302 redboot配置主板(主要是网络)。

# ---- 主板配置部分 ----
# Local IP address是EP9302 IP地址
# Default server IP address是RH9 IP地址
RedBoot> fcon -i
Initialize non-volatile configuration - continue(y/n)
Run script at boot: true
Boot script:
Enter script, terminate with empty line
>> fis load ramdisk
>> fis load zImage
>> exec -r 0x800000 -s 0x800000
>>
Boot script(1000ms resolution): 1
Use BOOTP for network configuration: false
Gateway IP address: 192.168.16.1
Local IP address: 192.168.16.93
Local IP address mask: 255.255.255.0
Default server IP address: 192.168.16.91
DNS server IP address:
Network hardware address[MAC]:0x78:0x56:0x34:0x12:0x64:0x30
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue(y/n)? y

# ---- 拷贝文件部分 ----
RedBoot> fis init -f
RedBoot> load -v -r -b 0x800000 ramdisk.gz -h 192.168.16.91
RedBoot> fis create -b 0x800000 -l 0x800000 ramdisk
RedBoot> load -v -r -b 0x80000 zImage -h 192.168.16.91
RedBoot> fis create -b 0x80000 -l 0x120000 zImage

# ---- 重启 ----
RedBoot> re

重启EP9302之后,主板开机加载RedBoot,然后执行默认的启动脚本,加载ramdisk和zImage。
就这样我们进入Linux,第一次进入嵌入式Linux的感觉,是不是很奇妙?

3 条评论:

  1. 葱白啥阿-_-!!!
    我都忙活了快一个月咯!

    回复删除
  2. 我……这个……我……说真的……我看不懂,完全不懂……
    就是过来看看你的新家,咋就搬了呢,那么巨大的工程,你还真是能折腾啊。

    回复删除