打印
[嵌入式linux]

借宝地用 图图(搞了快几个星期了 环境还是没有搭好!哎)

[复制链接]
楼主: itelectron
手机看帖
扫描二维码
随时随地手机跟帖
41
itelectron|  楼主 | 2009-8-17 23:03 | 只看该作者 回帖奖励 |倒序浏览
前言

今年1月份到2月份在自己博客上发表了几篇关于AT91RM9200引导程序的**,分别是

建立交叉编译工具链

TFTP和NFS服务的设置

U-Boot1.1.4在AT91RM9200上的移植
时间过的很快,工作也很忙,一晃就过了半年多。再回头看,已经发现很多都落伍了。新版本出了一波又一波。linux已经到了2.6.20。federo也已经到了FC7。如果不对本人以前的**更新的话,势必会误导初学者。所以针对目前比较新的环境,重新写下整个过程。不过,由于实在挺忙的,所以比第一次写的要简洁许多,大家如果有不明白的地方,可以参考以前的**。大多数内容都大同小异,只不过一些细节需要注意。由于比较匆忙,没有仔细核对。如果您在文中发现有不当之处敬请批评指正。

这次使用的环境及软件源码版本如下:

软件环境

宿主机:FC6 ,虚拟机vmware 6.0

Linux-2.6.19.2 +at91patch

U-Boot 1.2 , busybox1.2.2.1(或者busybox-1.6.1)

硬件环境

母板:AT91RM9200EK

CPU:AT91RM9200 ,180MHz(200MIPS)

存储器:32M SDRAM(MT48LC8M16A2)

64Mbits Flash(SST39VF6401B)

USB接口:USB-Host USB-Device

网络接口: 10/100M DM9161E

DBGU串行调试接口

JTAG接口
使用ELDK4.1 构建交叉编译环境

1. 下载ELDK4.1的iso文件。在www.denx.de网站上可以找到。其有两个版本,一个是使用uclibc库,另一个使用libc库。建议使用uclibc,因为用uclibc库编译出来的二进制可执行文件要小许多。
#mkdir /mnt/iso

#mount –o loop ./arm-2007-01-22-uclibc.iso /mnt/iso

2. 安装ELDK,普通用户即可执行,无需根用户,只要保证普通用户有执行权限和拥有权限。

#mkdir /ELDK

#./install –d /ELDK

等待安装结束。

3. 设置环境变量
#PATH=$PATH:/ELDK/usr/bin (注意:$PATH与冒号之间无空格)

本人使用的板子是以EK板为母板设计的。他和DK板有一点不同。无论是Linux内核还是U-Boot,都对DK板做了很好的支持,对EK板没有相应的配置及修改文件。所以,本人针对EK板做修改。至于用DK板的朋友,就不用那么麻烦了。
Linux-2.6.19.2的移植

1. 首先下载2.6.19.2的内核源代码,同时要下载针对AT91RM9200的patch包。然后执行

# tar zxvf linux-2.6.19.tar.gz

#cp 2.6.19-at91.patch.gz linux-2.6.19

# cd linux-2.6.19

# zcat ./2.6.19-at91.patch.gz | patch -p1打补丁

2. 修改Makefile:

ARCH ?=arm

CROSS_COMPILE ?=/ELDK/usr/bin/arm-linux-修改Makefile,使交叉编译

3. 修改好之后进行编译。

# make mrproper

# make distclean

# make at91rm9200ek_defconfig

# make menuconfig

说明:这里大家会出现一个出现ics1523.c错误,原因是linux2.6.19.2里的EK默认配置将一个视频驱动编进去了,但是该驱动已经很老了。所以会出现错误。将device drivers->graphic support ->CONFIG_FB_S1D13** 去除,即能消除错误。

4. 修改其中Boot Options->Default Kernel Command String:

mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw initrd=/linuxrc

最后#make 则在arch/arm/boot/下生成zImage内核映象文件。

U-Boot1.2在AT91RM9200EK板上的移植

1. 在Makefile中添加at91rm9200ek_config 编译项

2. 建立目录 board/at91rm9200ek

3. 将原目录at91rm9200dk里的文件拷到at91rm9200ek目录下

4. 参照前一篇**“U-Boot1.1.4在AT91RM9200上的移植”,对文件进行修改

5. 针对at91rm9200ek,改at91rm9200ek.c里

gd->bd->bi_arch_number = MACH_TYPE_AT91RM9200EK;
不过,光这样还不行,光这样,EK板的机器类型码还不能传输到内核参数里。因为go只是执行普通的应用程序,不考虑到传递参数给内核。需要修改U-boot的common/cmd_boot.c的do_go()函数:
        /*#if defined(CONFIG_I386)*/            <==注释掉
                DECLARE_GLOBAL_DATA_PTR;   (在使用gd之前)
        /*#endif*/                                        <==注释掉
        ....
        #if !defined(CONFIG_NIOS)
        /*******************add here*******************************/
        if(argc==2)
            rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
        else
        /*********************add end *****************************/   
            rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);

经过编译后一切OK,这样就大功告成了。完美的AT91RM9200EK启动程序就这样产生了,享受ARM带给你的乐趣吧。

使用特权

评论回复
42
itelectron|  楼主 | 2009-8-17 23:05 | 只看该作者
u-boot-2009.03编译OK

-Map u-boot.map -o u-boot
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
zou@zou-desktop:~/workspace/u-boot-2009.03$

使用特权

评论回复
43
itelectron|  楼主 | 2009-8-17 23:15 | 只看该作者
zou@zou-desktop:~/workspace/u-boot-2009.03$ make smdk2410_config
Configuring for smdk2410 board...
zou@zou-desktop:~/workspace/u-boot-2009.03$

使用特权

评论回复
44
itelectron|  楼主 | 2009-8-17 23:45 | 只看该作者
感觉回到了DOS时代.  DIR    FORMAT  CD..

使用特权

评论回复
45
一朝成名| | 2009-8-17 23:47 | 只看该作者
思维要转变,以后你会慢慢喜欢这样的,而不是去拿鼠标一个一个点开~鼠标太慢了

使用特权

评论回复
46
sinanjj| | 2009-8-18 09:12 | 只看该作者
I 服了 you。


这个帖子应该改名叫:菜鸟从0起步详细心里活动描写。。。。


绝对的典型案例。。。

使用特权

评论回复
47
john_light| | 2009-8-18 10:11 | 只看该作者
I 服了 you。


这个帖子应该改名叫:菜鸟从0起步详细心里活动描写。。。。


绝对的典型案例。。。
sinanjj 发表于 2009-8-18 09:12

学习过程做笔记没什么错。

使用特权

评论回复
48
sinanjj| | 2009-8-18 11:06 | 只看该作者
看这份热情,给加个精

关键看持久性。。。。

我从想玩linux到玩到linux就走了2年。。。。。。

使用特权

评论回复
49
sinanjj| | 2009-8-18 11:07 | 只看该作者
加精了,希望持久下去,别3天的热情。

使用特权

评论回复
50
一朝成名| | 2009-8-18 12:57 | 只看该作者
本帖最后由 一朝成名 于 2009-8-18 12:59 编辑
加精了,希望持久下去,别3天的热情。
sinanjj 发表于 2009-8-18 11:07


我早就想加了~想让lz整理整理再加呢,你下手早了;P
看了下,jj没加上,只是加了高亮,我来补充下

使用特权

评论回复
51
itelectron|  楼主 | 2009-8-18 21:26 | 只看该作者
晕倒   俺不要裤子!
偶的交流电机程序 今天又有进展了 呵呵!
回来一不小心 睡到9点.

使用特权

评论回复
52
itelectron|  楼主 | 2009-8-18 21:41 | 只看该作者
本帖最后由 itelectron 于 2009-8-18 21:47 编辑

我是准备 持久下去! 最少要到 过年 回家的 前 个星期
要不然  我 的2440开发板  就生绣了,07年买的.一直在箱底.
弱电  嵌入式 是最初的 目标.
却不小心进了强电!工控!头是老板 也是总工!(反正公司里他是全能+汇编NO C  自比东方不败)俺只得自学!  
还有 我是把我找到的资料 贴在这里 懒得再次GOOGLE  声明 !!!!!!!!!!!不是偶写的哦.

和我出来的兄弟 在深圳  他上次 电话 跟偶说  他一直没有时间 学单片机  想星期天去培训 !俺和他比起来是幸福死了.

X掉裤子!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!因为我自己 有一条 2条 太热了 夏天 受不了!!!

使用特权

评论回复
53
itelectron|  楼主 | 2009-8-18 21:46 | 只看该作者
继续移植UBOOT接下来可能会 越来越轻松 翻出来了箱底的资料 光盘 总共好象 有20几个G

使用特权

评论回复
54
itelectron|  楼主 | 2009-8-18 23:31 | 只看该作者
本帖最后由 itelectron 于 2009-8-18 23:42 编辑

奇怪 编译u-boot-2009.03 /smdk2410 通不过 (非 官方下载)
但是 编译u-boot-2009.06 /smdk2410 却通过了(官方下载)
虽然 不能 明确 是  版本问题  但是 还 是 到 官方下的用 的心里 踏实。
小结    编译UBOOT  不仅 和 GCC本身 版本 有 关系 而且 和 UBOOT 版本 也 有 关系  找到 最新 匹配的 版本
那么编译 才 不会 那么麻烦 !

个人感觉 对于新手 选UBUNTU 当作 LINUX OS 比较 好 因为 接近 WINDOWS  (虽然 要 转变观念但是 也要一个过程吗呵呵!!)

还有一个 好处 是可以 偷懒  打开 终端  基本 用鼠复制 粘贴就 可以 了  省得 敲键盘(虽然 要 转变观念但是 也要一个过程吗呵呵!!)
俺学习东西 一般 先得正确结果 在 回头 学习 分析过程。



/smdk2410/libsmdk2410.a --end-group -L /home/zou/usr/elkarm/usr/bin/../lib/gcc/arm-linux-gnueabi/4.2.2/soft-float -lgcc \
                        -Map u-boot.map -o u-boot
arm-linux-objcopy -O srec u-boot u-boot.srec
arm-linux-objcopy --gap-fill=0xff -O binary u-boot u-boot.bin
zou@zou-desktop:~/workspace/u-boot-2009.06$

使用特权

评论回复
55
itelectron|  楼主 | 2009-8-18 23:37 | 只看该作者
还有 我 装  GCC (没有OK)
Eclipse(装是 OK但不会添加工程配置)
ELDK4。2 安装 OK  用起来也 顺手  建议 用ELDK4。2

使用特权

评论回复
56
itelectron|  楼主 | 2009-8-18 23:41 | 只看该作者
如果是 移植UBOOT 到2440的 话 因为 UBOOT没有 自己带  但是 可以 到 网上 下载  原官方UBOOT 2440包然后把相关 2440文件 复制到新UBOOT 的 samsung 文件下 这样 可以 偷点懒。。。。!!!

使用特权

评论回复
57
itelectron|  楼主 | 2009-8-18 23:49 | 只看该作者
饿阿! 觅食去。

使用特权

评论回复
58
itelectron|  楼主 | 2009-8-19 21:28 | 只看该作者
zou@zou-desktop:~/workspace/u-boot-2009.06$ make smdk2440_config
Configuring for smdk2440 board...
zou@zou-desktop:~/workspace/u-boot-2009.06$ make ARCH=arm

使用特权

评论回复
59
itelectron|  楼主 | 2009-8-19 21:28 | 只看该作者
在包含自 /home/zou/workspace/u-boot-2009.06/include/command.h:30 的文件中,
                 从 /home/zou/workspace/u-boot-2009.06/include/image.h:55,
                 从 /home/zou/workspace/u-boot-2009.06/tools/mkimage.c:26:
/home/zou/workspace/u-boot-2009.06/include/config.h:2:30: 错误: configs/smdk2440.h:没有该文件或目录
make[1]: *** [mkimage.o] 错误 1
make[1]:正在离开目录 `/home/zou/workspace/u-boot-2009.06/tools'
make: *** [tools] 错误 2

使用特权

评论回复
60
itelectron|  楼主 | 2009-8-19 21:32 | 只看该作者
在包含自 /home/zou/workspace/u-boot-2009.06/include/config.h:2 的文件中,
                 从 /home/zou/workspace/u-boot-2009.06/include/command.h:30,
                 从 /home/zou/workspace/u-boot-2009.06/include/image.h:55,
                 从 /home/zou/workspace/u-boot-2009.06/tools/mkimage.c:26:
/home/zou/workspace/u-boot-2009.06/include/configs/smdk2440.h:103:26: 错误: cmd_confdefs.h:没有该文件或目录
make[1]: *** [mkimage.o] 错误 1
make[1]:正在离开目录 `/home/zou/workspace/u-boot-2009.06/tools'
make: *** [tools] 错误 2

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则