分享

在uClinux文件系统中增加应用程序

 danydany_ok 2010-12-03
编写hello.c程序,代码如下:

  #include <stdio.h>

  int main()

  {

  int i;

  for(i=0;i<6;i++)

  {

  printf("i=%d\n",i);

  printf("Hello,embedded linux\n");

  }

  return 0;

  }

  编译hello.c

  linux-dist$">stuyou@UBUNTU:/usr/local/src/uClinux-dist$ sudo arm-elf-gcc -elf2flt -o hello hello.c

  生成hello,hello.gdb

  挂载romfs

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ mkdir romfs_dir

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo mount -o loop romfs.img romfs_dir

  拷贝hello

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo cp ../hello ./romfs_dir

  出错

  cp: cannot create regular file `romfs_dir/bin/hello': Read-only file system

  复制根文件系统到一个新到目录中

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo mkdir new_romfs

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo cp -r romfs_dir/* new_romfs

  拷贝hello

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo cp ../hello new_romfs/bin

  生成新的romfs映像

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ sudo genromfs -f romfs_new.img -d new_romfs/

  修改skyeye.conf,使之使用新的映像

  #skyeye config file sample

  arch:arm

  cpu: arm7tdmi

  mach: at91

  mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000

  mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000

  mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./romfs_new.img

  mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000

  mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000

  mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000

  mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000

  #set nic info

  #net: type=cs8900a, base=0xfffa0000, size=0x20,int=16, mac=0:4:3:2:1:f, ethmod=tuntap, hostip=10.0.0.1

  net: type=cs8900a, ethmod=tuntap, hostip=10.0.0.1

  uart: mod = term

  #dbct: state=on

  在skyeye上启动uClinux

  stuyou@UBUNTU:/usr/local/src/uClinux-dist/images$ skyeye -c skyeye.conf -e linux

  得到如下启动信息:

  Your elf file is little endian.

  arch: arm

  cpu info: armv3, arm7tdmi, 41007700, fff8ff00, 0

  mach info: name at91, mach_init addr 0x80605a0

  ethmod num=1, mac addr=0:0:0:0:0:0, hostip=10.0.0.1

  failed to setup_module (name:net, type:cs8900a)

  tapif_init: icotl TUNSETIFF erroruart_mod:0, desc_in:, desc_out:, converter:

  SKYEYE: use arm7100 mmu ops

  Loaded ROM ./romfs_new.img

  exec file "linux"'s format is elf32-little.

  load section .init: addr = 0x01000000 size = 0x0000a000.

  load section .text: addr = 0x0100a000 size = 0x000dccd0.

  load section .data: addr = 0x010e8000 size = 0x00009ce4.

  not load section .bss: addr = 0x010f1d00 size = 0x000220a0 .

  not load section .debug_abbrev: addr = 0x00000000 size = 0x0003d30e .

  not load section .debug_info: addr = 0x00000000 size = 0x0186c1ff .

  not load section .debug_line: addr = 0x00000000 size = 0x00304551 .

  not load section .debug_pubnames: addr = 0x00000000 size = 0x0000c30b .

  not load section .debug_aranges: addr = 0x00000000 size = 0x00002438 .

  call armul_InitSymTable,kernel filename is linux.

  start addr is set to 0x01000000 by exec file.

  Linux version 2.4.31-uc0 (root@UBUNTU) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http:///coldfire/)(uClinux XIP and shared lib patches from http://www./)) #1 Thu May 13 15:02:46 CST 2010

  Processor: Atmel AT91M40xxx revision 0

  Architecture: EB01

  On node 0 totalpages: 1024

  zone(0): 0 pages.

  zone(1): 1024 pages.

  zone(2): 0 pages.

Kernel command line: root=/dev/rom0

  Calibrating delay loop... 15.82 BogoMIPS

  Memory: 4MB = 4MB total

  Memory: 2936KB available (883K code, 180K data, 40K init)

  Dentry cache hash table entries: 512 (order: 0, 4096 bytes)

  Inode cache hash table entries: 512 (order: 0, 4096 bytes)

  Mount cache hash table entries: 512 (order: 0, 4096 bytes)

  Buffer cache hash table entries: 1024 (order: 0, 4096 bytes)

  Page-cache hash table entries: 1024 (order: 0, 4096 bytes)

  POSIX conformance testing by UNIFIX

  Linux NET4.0 for Linux 2.4

  Based upon Swansea University Computer Society NET3.039

  Initializing RT netlink socket

  Starting kswapd

  Atmel USART driver version 0.99

  ttyS0 at 0xfffd0000 (irq = 2) is a builtin Atmel APB USART

  ttyS1 at 0xfffcc000 (irq = 3) is a builtin Atmel APB USART

  Blkmem copyright 1998,1999 D. Jeff Dionne

  Blkmem copyright 1998 Kenneth Albanowski

  Blkmem 1 disk images:

  0: 1400000-15123FF [VIRTUAL 1400000-15123FF] (RO)

  RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize

  NET4: Linux TCP/IP 1.0 for NET4.0

  IP Protocols: ICMP, UDP, TCP

  IP: routing cache hash table of 512 buckets, 4Kbytes

  TCP: Hash tables configured (established 512 bind 512)

  NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.

  VFS: Mounted root (romfs filesystem) readonly.

  Shell invoked to run file: /etc/rc

  Command: hostname GDB-armulator

  Command: /bin/expand /etc/ramfs.img /dev/ram0

  Command: mount -t proc proc /proc

  Command: mount -t ext2 /dev/ram0 /var

  Command: mkdir /var/tmp

  Command: mkdir /var/log

  Command: mkdir /var/run

  Command: mkdir /var/lock

  Command: mkdir /var/empty

  Command: cat /etc/motd

  Welcome to

  GDB/armulator support by

  For further information check:

  http://www./

  Execution Finished, Exiting

  Sash command shell (version 1.1.1)

  />

  切换到/bin目录下

  /> cd bin

  /bin> ls

  bcdm

  boa

  busybox

  dhcpcd

  expand

  false

  gdbserver

  hello

  ifconfig

  inetd

  init

  login

  mount

  mtdm

  ping

  reboot

  route

  sh

  telnetd

  thdm

  true

  umount

  看到了hello,执行

  /bin> ./hello

  i=0

  Hello,embedded linux

  i=1

  Hello,embedded linux

  i=2

  Hello,embedded linux

  i=3

  Hello,embedded linux

  i=4

  Hello,embedded linux

  i=5

  Hello,embedded linux

  /bin>

  得到了正确到执行结果。

  完毕!!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多