Chinaunix首页 | 论坛 | 博客
  • 博客访问: 177971
  • 博文数量: 28
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 230
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-28 20:47
文章分类
文章存档

2011年(1)

2008年(3)

2007年(24)

我的朋友

分类: LINUX

2007-12-02 16:44:46

答:1、怎样在EB44B0开发板的uClinux中添加应用程序,请举个例子?
下面是uClinux下一个应用程序的代码leddemo.c
#include 

/*
 * LED blink function. 
 *     this function blink the led
 */
void led_blink(void)
{
static int led_status = 0;

led_status += 1;
if(led_status % 2 == 0)
*(char *)0x02000000 = 0xff;
else
*(char *)0x02000000 = 0x00;
}

/*
 * LED blink function. 
 *     this function blink the led
 */
void seg_blink(void)
{
static unsigned char seg_value[] = { 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e };    
static int seg_status = 0;

*((unsigned char *)0x8000000) = seg_value[seg_status];
seg_status += 1;
if(seg_status > 15)
seg_status = 0;
}

int main()
{
int loopcnt;
printf("hello world!!!\n");

while(1)
{
led_blink();
seg_blink();
sleep(1);
}
return 0;
}
使用如下Makefile文件编译
CC = arm-elf-gcc
LD = arm-elf-ld
EXEC = leddemo
OBJS = leddemo.o

CFLAGS +=  
LDFLAGS += -Wl,-elf2flt  

all: $(EXEC)

$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS$(LDLIBS_$@))

clean:
-rm -f $(EXEC) *.elf *.gdb *.o

$(OBJS): 

将上述两个文件保存在一个目录下,然后使用make命令编译,编译成功将生成leddemo和leddemo.gdb,其中leddemo文件即为生成的uClinux应用程序,可以将其加载到文件系统中,然后在uClinux中运行。


2、EB44B0的uClinux采用的是哪个版本?
EB44B0教学实验系统采用uCLinux发行版本20040408


3、EB44B0的uClinux采用的编译器是什么?
EB44B0教学实验系统采用arm-linux-gcc编译器编译uClinux核心,安装过程见用户手册,也可以使用arm-elf-gcc编译器,安装过程为:
从上下载arm-elf-tools-20030314.sh安装包。得到这个文件以后,执行以下命令:
sh arm-elf-tools-20030314.sh


4、怎样检测arm-elf-gcc编译器是否安装成功?
安装完成后,键入arm-elf-gcc, 如果能看到下面的输出信息: 
Reading specs from /usr/local/lib/gcc-lib/arm-elf/2.95.3/specsgcc version 2.95.3 20010315 (release) 
(ColdFire patches - 20010318 from )(uClinux XIP and shared lib patches  from )
表示uClinux-ARM的交叉编译环境已经建立起来了。


5、怎样修改使用arm-elf-gcc编译器编译内核?
EB44B0发布缺省使用arm-linux-gcc编译器,如果需要修改,请修改linux-2.4.x目录下的Makefile文件,在该文件中搜索arm-linux-然后将其替换为arm-elf-。


6、使用arm-linux-gcc编译器能编译应用程序吗?
不能,编译应用程序请使用arm-elf-gcc编译器,并使用-Wl,-elf2flt连接参数生成flat格式文件。


7、如何配置应用程序自动运行?
如果需要在系统启动以后自动运行leddemo程序,需要编辑ramdisk中的启动脚本文件,该文件为
etc/rc
使用vi编辑器编辑,在该文件最后添加如下脚本:
/bin/leddemo
该脚本将启动后运行leddemo,直到程序退出。或
/bin/leddemo&
它将在后台运行leddemo,不影响其他的程序运行。


8、EB44B0 uClinux使用什么文件系统?
EB44B0使用ramdisk。


9、怎样制作和修改ramdisk?
1. 怎样建立ramdisk
   mkfs /dev/ram0
   mount /dev/ram0 /mnt/ram0
   df
   cd /mnt/ram0
   拷贝文件到/mnt/ram0
   cat /dev/ram0 > ramdisk
   gzip ramdisk
2. 怎样从压缩ramdisk中复原
   cat /var/ftp/incoming/ramdisk_12_16.gz | gunzip > /dev/ram1
   mount /dev/ram1 /mnt/ram1
   df


10、怎样修改ramdisk的大小?
1. 修改ramdisk 压缩文件起始位置和大小:
   cd /usr/local/src/uClinux-dist/linux-2.4.x/arch/armnommu/mach-s3c44b0/
   vi arch.c
   修改linux-2.4.x/arch/armnommu/mach-s3c44b0/arch.c文件中的fixup_s3c44b0中的setup_initrd函数调用,如下所示
   setup_initrd( (0x0c300000), 0x200000);
   第一个参数为ramdisk地址,第二个参数为大小。
如果你的ramdisk压缩后小于2M可以不修改
2. 修改ramdisk大小   
   vi /usr/local/src/uClinux-dist/linux-2.4.x/arch/armnommu/mach-s3c44b0/arch.c
文件中的fixup_s3c44b0中的setup_ramdisk函数调用,如下所示
   setup_ramdisk( 1, 0, 0, 4096);
   最后一个参数为大小。上图为4096kbytes, 即为4Mbytes


11、怎样下载uCLinux映像
可以通过如下方式下载:
1)串口下载:
使用Alt+1开启一个控制台,在该控制台下启动minicom:
#minicom -s
缺省设置一般为串口0。将EB44B0的串口0与PC的串口0连接,然后将EB44B0上电,正常情况下将在minicom中看到bootloader菜单界面,如果没有请检查串口连接以及EB44B0电源是否接通。
在minicom中输入2,将进入串口uClinux下载界面,首先提示输入待下载文件的大小。
使用Alt+2开启另外一个控制台,在该控制台下输入:
#cd /home/cvtech/jx44b0/uClinux-dist/images
#ls –l
记下zImage的大小并按Alt+1控制台的minicom界面中输入zImage文件的大小,然后回车确认。
按Alt+2,输入:
cat zImage > /dev/ttyS0
程序将通过串口0发送zImage,请等待一定时间,在此过程中没有任何提示,请用户注意,下载速度约为10kbytes/s,也就是说1M字节的文件大概需要100秒钟。
按Alt+1,在程序下载结束后将打印提示信息,下载完成后,请输入n或者N,将自动运行刚才下载的uClinux映像或者输入y将烧写uClinux映像到flash中。
2) Tftp下载:
使用Alt+1开启一个控制台,在该控制台下启动minicom:
#minicom
缺省设置一般为串口0,如果不是,请参照用户手册的附录中关于minicom的设置进行设置。将EB44B0的串口0与PC的串口0连接,然后将EB44B0上电,正常情况下将在minicom中看到bootloader菜单界面,如果没有请检查串口连接以及EB44B0电源是否接通。
在minicom中输入8,将进入tftp uClinux下载界面。
使用Alt+2开启另外一个控制台,在该控制台下输入:
#cd /home/cvtech/jx44b0/uClinux-dist/images
#tftp 192.168.1.45
将进入tftp界面,在该界面分别输入
tftp>binary
tftp>put zImage
如果正常,在minicom中将显示下载进度,下载速度在100kbytes/s以上。
按Alt+1,在程序下载结束后将打印提示信息,下载完成后,请输入n或者N,将自动运行刚才下载的uClinux映像。


12、怎样下载uCLinux的ramdisk
可以通过如下方式下载:
1)串口下载:
使用Alt+1开启一个控制台,在该控制台下启动minicom:
#minicom -s
缺省设置一般为串口0。将EB44B0的串口0与PC的串口0连接,然后将EB44B0上电,正常情况下将在minicom中看到bootloader菜单界面,如果没有请检查串口连接以及EB44B0电源是否接通。
在minicom中输入5,将进入串口uClinux下载界面,首先提示输入待下载文件的大小。
使用Alt+2开启另外一个控制台,在该控制台下输入:
#cd /home/cvtech/jx44b0/uClinux-dist/images
#ls –l
记下ramdisk的大小并按Alt+1控制台的minicom界面中输入ramdisk.gz文件的大小,然后回车确认。
按Alt+2,输入:
cat ramdisk.gz> /dev/ttyS0
程序将通过串口0发送ramdisk.gz,请等待一定时间,在此过程中没有任何提示,请用户注意,下载速度约为10kbytes/s,也就是说1M字节的文件大概需要100秒钟。
按Alt+1,在程序下载结束后将打印提示信息,下载完成后,请输入n或者N,将自动运行刚才下载的uClinux映像或者输入y将烧写uClinux映像到flash中。
2) Tftp下载:
使用Alt+1开启一个控制台,在该控制台下启动minicom:
#minicom
缺省设置一般为串口0,如果不是,请参照用户手册的附录中关于minicom的设置进行设置。将EB44B0的串口0与PC的串口0连接,然后将EB44B0上电,正常情况下将在minicom中看到bootloader菜单界面,如果没有请检查串口连接以及EB44B0电源是否接通。
在minicom中输入9,将进入tftp uClinux下载界面。
使用Alt+2开启另外一个控制台,在该控制台下输入:
#cd /home/cvtech/jx44b0/uClinux-dist/images
#tftp 192.168.1.45
将进入tftp界面,在该界面分别输入
tftp>binary
tftp>put ramdisk.gz
如果正常,在minicom中将显示下载进度,下载速度在100kbytes/s以上。
按Alt+1,在程序下载结束后将打印提示信息,下载完成后,请输入n或者N,将自动运行刚才下载的uClinux映像。


13、怎样在uClinux中测试以太网连接?
在bootloader中按7启动uClinux,然后在pc机上输入:
#ping 192.168.1.45
正常将得到结果如下:
Pinging 192.168.1.45 with 32 bytes of data:

Reply from 192.168.1.45: bytes=32 time<10ms TTL=128
Reply from 192.168.1.45: bytes=32 time<10ms TTL=128
Reply from 192.168.1.16: bytes=32 time<10ms TTL=128
Reply from 192.168.1.16: bytes=32 time<10ms TTL=128

Ping statistics for 192.168.1.45:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum =  0ms, Average =  0ms
如果网络不通,将得到如下结果:
Pinging 192.168.1.45 with 32 bytes of data:

Request timed out.
Request timed out.
Request timed out.
Request timed out.

Ping statistics for 192.168.1.45:
    Packets: Sent = 4, Received = 0, Lost = 4 (100% loss),
Approximate round trip times in milli-seconds:
    Minimum = 0ms, Maximum =  0ms, Average =  0ms


14、uClinux ping不通?
如果ping不通,请检查pc端ip地址是否为192.168.1.xxx网段,并且不能为192.168.1.45。以及是否使用的是直连网线。


15、怎样连接网线?
可以有两种方式进行网络连接:
1) 将EB44B0的网卡使用普通网线接入主机所在的局域网中;
2) 将EB44B0的网卡使用直连网线直接与主机的网卡连接。


16、怎样修改IP地址?
在uClinux控制台下输入命令:
>ifconfig eth0 192.168.1.44
将修改IP地址为192.168.1.44


17、内核编译问题1?
问:
我按照实验书上面做,在make zImage时出现如下错误:
entry-armv.S: Assembler messages:
entry-armv.S:1239: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1241: Error: Internal_relocation (type 185) not fixed up (IMMEDIATE)
entry-armv.S:1292: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1293: Error: Internal_relocation (type 187) not fixed up (OFFSET_IMM)
entry-armv.S:1530: Error: Can not represent SWI relocation in this object file format (0) 
到底是什么回事???
答:
出现此问题主要是安装问题,uClinux内核没有使用替换后的内核,请用户按照EB44B0光盘的用户手册进行安装,不要按照JX44B0教学系统uClinux安装,否则可能导致上述错误,如果按照EB44B0光盘提供的用户手册进行安装是不会出现此问题的。


18、内核编译问题2?
问:
我刚才是把串口项(serial device里的s3c44b0 sercial port support)去掉才编译成功的,一加上那项就不行了
错误如下:
        --end-group \
        -o linux
drivers/serial/serial.o: In function `uart_setup_port'':
/home/dk/uClinux-dist/linux-2.4.x/drivers/serial/serial_core.c:1857: undefined reference to `uart_type''
/home/dk/uClinux-dist/linux-2.4.x/drivers/serial/serial_core.c:1857: relocation
truncated to fit: R_ARM_PC24 uart_type
drivers/serial/serial.o: In function `uart_register_port'':
/home/dk/uClinux-dist/linux-2.4.x/drivers/serial/serial_core.c:1857: undefined reference to `uart_type''
/home/dk/uClinux-dist/linux-2.4.x/drivers/serial/serial_core.c:1857: relocation
truncated to fit: R_ARM_PC24 uart_type
make: *** [linux] Error 1
答:
需要定义proc file,在File System下的/Proc file system support.
加上它就可以


19、romfs问题?
问:
在做leddemo时,romfs.img在哪里?它..uclinux-dist/image/romfs.img找不到,没有此文件。
答:
关于romfs的问题,开发板没有使用romfs,而是采用ramdisk,你可以按照指导书上另外一种方法,将生成的leddemo通过ftp拿到板子上,然后运行,记得使用chmod该属性。


20、uClinux启动问题?
问:
prepare_namespace start
RAMDISK:Couldn''t find valid RAM disk image starting at 0.
Freeing initrd memory: 1024K
Kernel panic: VFS: Unable to mount root fs on 01:00 
换了一个,启动变成这样子了。这又是什么回事???
答:
ramdisk被擦除掉了或者被写入了不合法的ramdisk文件,ramdisk文件必须为ram盘压缩后生成的文件,具体制作方法请参考第“9”项,其文件民通常为ramdisk_xxx.gz,请将ramdisk重新烧写到flash中,zImage加载的时候需要加载ramdisk。
此外应用程序不能直接烧写到ramdisk区域,必须加入到ram盘后重新制作ramdisk才能烧写到该区域,如果烧写到该区域后,掉电可以保存,否则如果使用ftp从服务器上下载时,掉电后必须重新下载。

完整的说明及相关图片请参考:

阅读(2163) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~