Sunny_Li 发表于 2005-6-26 13:11:27

请教高手,有关与UClinux 编译问题

1.我用的是:uClinux-dist-20040408.tar.gz与arm-elf-tools-20030314.sh
以下是我的编译uClinux 过程:

3. 执行脚本即可完成交叉编译器的安装
./arm-elf-tools-20030314.sh

4. 测试一下,输入 arm-elf-gcc 看看是否能够自动补齐?
$ arm-elf-gcc -v
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specs
gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://fiddes.net/coldfire/)(uClinux XIP and shared lib patches from http://www.snapgear.com/)

$ which arm-elf-gcc
/usr/local/bin/arm-elf-gcc

表明 arm-elf-gcc 已经安装在 /usr/local/bin/ 目录下了。


Step 1 : 交叉编译 uClinux 内核
1. 下载 uClinux-dist-20040408.tar.gz 到当前工作目录下

2. 解压 uClinux-dist-20040408.tar.gz 文件到 uClinux-dist 目录
tar xvzf uClinux-dist-20040408.tar.gz
此时当前工作目录下增加了一个名为 uClinux-dist 的目录。

3. 进入 uClinux-dist 目录
cd uClinux-dist

4. 修改 vmlinux-armv.lds.in 文件,
vi linux-2.4.x/arch/armnommu/vmlinux-armv.lds.in

*(got) /* Global Offset table */
之后添加如下语句:
romfs_data = .;
romfs.o
romfs_data_end = .;
即修改为:
65 *(.got) /* Global offset table */
66
68 romfs_data = .;
69 romfs.o
70 romfs_data_end = .;

5. 修改 vendors/Samsung/4510B/Makefile 文件,
vi vendors/Samsung/4510B/Makefile
在 image 目标的第三行,增加一条语句:
arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
如下为增加之后:
63 image:
64 [ -d $(IMAGEDIR) ] || mkdir -p $(IMAGEDIR)
65 genromfs -v -V "ROMdisk" -f $(ROMFSIMG) -d $(ROMFSDIR)
66 arm-elf-ld -r -o $(ROOTDIR)/$(LINUXDIR)/romfs.o -b binary $(ROMFSIMG)
67 $(CROSS_COMPILE)objcopy -O binary --remove-section=.romvec \
68 --remove-section=.text --remove-section=.ramvec \
69 --remove-section=.init \
70 --remove-section=.bss --remove-section=.eram \
71 $(ROOTDIR)/$(LINUXDIR)/linux $(IMAGEDIR)/linux.data

6. make menuconfig
在 Vendor/Product Selection ---> 中选择
--- Select the Vendor you wish to target
(Samsung) Vendor
--- Select the Product you wish to target
(4510B) Samsung Products

在 Kernel/Library/Defaults Selection ---> 中选择
(linux-2.4.x) Kernel Version
(uClibc) Libc Version

其他选项都不变,按照缺省设置,选择退出,保存配置。

7. make dep

8. make lib_only

9. make user_only
[说明] 编译login,boa程序时可能出现 undefined reference to 'crypt_old'的错误,
boa.elf2flt: In function `auth_check_userpass':
/tmp/liming/uClinux-dist/user/boa/src/auth.c:281: undefined reference to `crypt_old'
可以修改
config/.config
注释掉第25行的 CONFIG_USER_OLD_PASSWORDS
如下:
24 CONFIG_USER_LOGIN_LOGIN=y
25 # CONFIG_USER_OLD_PASSWORDS=y
26 # CONFIG_USER_ONLY_ROOT is not set
然后再
cd user/boa/src/
rm *.o
重新编译 make user_only 一下这个目录里面的 obj 文件就可以了。

10. make romfs

11. make
.............

最终会出现以下问题,小弟实在搞不定拉,请教大虾指点

entry-armv.S: Assembler messages:
entry-armv.S:1283: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1285: Error: Internal_relocation (type 185) not fixed up (IMMEDIATE)
entry-armv.S:1336: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1337: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1608: Error: Can not represent SWI relocation in this object file format (0)
make: *** Error 1
make: Leaving directory `/usr/lizhaohui_App/linux_demo/uClinux-dist/linux-2.4.x/arch/armnommu/kernel'
make: *** Error 2
make: Leaving directory `/usr/lizhaohui_App/linux_demo/uClinux-dist/linux-2.4.x'
make: *** Error 1

Anomymous 发表于 2005-6-26 13:18:43

我是昨天刚在RedHat9.0下,按这个步骤进行编译的,最后成功了,没出问题呀

Sunny_Li 发表于 2005-6-26 15:46:12

大虾啊,我的linux RedHat9.0,是装载虚拟机VM下的哦!!你们有谁在虚拟机VM下编译uClinux成功经验啊!!

limingth 发表于 2005-6-27 10:50:11

这种问题我以前似乎碰到过,同样的步骤在两台不同的机子上一个成功了,一个就死活出不来。
建议你换一台机器试试看,其他也没什么好办法了:-(

bouncer_chen 发表于 2005-6-27 11:25:44

我昨天也成功完成。

winxp+VMWARE work station 5+redhat(标注是13),具体内核版本2。4。X的,下载了uclinux的开发软件之后依照lumit提供的文档进行处理,一切OK。

在配置vmware中linux网络的时候倒是出了一些问题,对vmware的网络模式混淆了好长一段时间。现在终于可以从wimxp上telnet和ftp到vm的linux。

注意,在step2的时候是否需要考虑先打一个patch,lumit的教程中谈到了这点,同时我在做的时候也是打上patch之后再继续的。

jackaly 发表于 2005-7-4 10:14:02

升级GCC试下啦!

Sunny_Li 发表于 2005-7-4 13:37:10

我下载了最新的Uclinux :uClinux-dist-20041215.tar.gz 去编译哦,可以OK拉,
多谢大虾指点啊,但uClinux-dist-20040408.tar.gz在我的VM下死活不行哦

limingth 发表于 2005-7-4 17:58:49

有些问题总是莫名其妙,不用深究习惯了就好。。。 :roll:

sxwglxq 发表于 2005-8-27 19:40:15

一定要vmware吗?我是新装的redhat 9.0,前面和楼顶上的情况一样,最后的错误:
arm-elf-objcopy:/home/sxwglxq/uClinux-dist/linux-2.4.x/linux:????
make:*** Error 1
make: Leaving directory /home/sxwglxq/uClinux-dist/vendors/Samsung/4510B'
make:*** Error 2
不知道怎么搞得?搞了一个下午,我觉得pdf里说的构详细了,怎么会有问题?
高手帮看看阿

panyongfeng 发表于 2005-9-11 17:49:45

我用的就是vmware,make的错误和sxwqlxq一样?
请指教

lin1010 发表于 2005-9-13 10:33:33

是不是编译环境一定要在redhat下,才可以我在fc3下编译几次都没有成功.

lanair04 发表于 2005-9-15 13:50:20

我的问题更奇怪, make menuconfig就没反应,以下是具体情况:

# make menuconfig
config/mkconfig > config.in
make -C /home/rock/lumit/uclinux/uClinux-dist/config/scripts/lxdialog all
make: Entering directory `/home/rock/lumit/uclinux/uClinux-dist/config/scripts/lxdialog'
/bin/sh: line 1: cc: command not found

>> Unable to find the Ncurses libraries.
>>
>> You must have Ncurses installed in order
>> to use 'make menuconfig'

make: *** Error 1
make: Leaving directory `/home/rock/lumit/uclinux/uClinux-dist/config/scripts/lxdialog'
make: *** Error 2
#
哪位高手能指导一下啊

brandice 发表于 2005-9-25 09:57:46

楼上的,你的问题不是很清楚吗?你机器上没有安装ncurses包,你安上了就能使用了,不过你现在也可以用make config

lumit-support-1 发表于 2005-9-27 14:43:52

arm-elf-objcopy:/home/sxwglxq/uClinux-dist/linux-2.4.x/linux:????
make:*** Error 1
make: Leaving directory /home/sxwglxq/uClinux-dist/vendors/Samsung/4510B'
make:*** Error 2

上面的错误是编译的时候没有生成linux的kernel,你可以把原来的head.S覆盖一下,然后重新编译两次试一下,我当时就是这么干的!!我觉得好像是在make clean的时候搞的鬼!!

yanglei5382 发表于 2005-10-16 22:53:01

除了www.uClinux.org可以下载到uClinux-dist-20040408.tar.gz与arm-elf-tools-20030314.sh 之外,哪里还可以下载到?为何www.uClinux.org网站经常打不开?
页: [1]
查看完整版本: 请教高手,有关与UClinux 编译问题