Chinaunix首页 | 论坛 | 博客
  • 博客访问: 78399
  • 博文数量: 9
  • 博客积分: 295
  • 博客等级: 一等列兵
  • 技术积分: 222
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-14 08:30
文章分类
文章存档

2013年(1)

2012年(8)

我的朋友

分类: LINUX

2012-07-21 10:23:13

记得当年读书的时候,写过ARM Linux下最小helloworld实验的代码,地址是:
当时这个使用OABI方式,现在改动下实现EABI方式实现系统调用:

  1. char *str = "hello world!\n";

  2. /**********************************************
  3. * function print
  4. * description :use the syscall write
  5. * prototype of wirte:
  6. * ssize_t write(int fd, const void *buf, size_t count)
  7. **********************************************/
  8. void print(void)
  9. {
  10.   __asm__ __volatile__(
  11.           "mov r0, #0x0\n\t" /*fd*/
  12.           "mov r1, %0\n\t" /*buf*/
  13.           "mov r2, #0x0d\n\t" /*count*/
  14.           "mov r7, #0x04\n\t"
  15.           "swi #0\n\t"
  16.           ::"r"(str):"r0","r1","r2");
  17. }

  18. /********************************************
  19. * function: exit
  20. * description: use the syscall exit
  21. ********************************************/
  22. void exit(void)
  23. {
  24.    __asm__ __volatile__(
  25.            "mov r0, #42\n\t"
  26.            "mov r7, #0x01\n\t"
  27.            "swi #0\n\t");
  28. }

  29. void nomain(void)
  30. {
  31. print();
  32. exit();
  33. }
ARM Linux使用swi实现用户空间到内核空间。
内核里面谈EABI,OABI,其实相对于系统调用的方式,当然我们所说的系统限于arm系统。EABI (Extended ABI),说的是这样的一种新的系统调用方式
mov r7, #num 
swi 0x0
原来的系统调用方式是这样, 
swi (#num | 0x900000) (0x900000是个magic值)
也就是说原来的调用方式(Old ABI)是通过跟随在swi指令中的调用号来进行的,现在的是根据r7中的值。

tinyhelloworld.lds
  1. ENTRY(nomain)
  2. SECTIONS
  3. {
  4. . = 0x00008000 + SIZEOF_HEADERS;
  5. tinytext :
  6. {
  7. *(.text)
  8. *(.data)
  9. *(.rodata)
  10. }
  11. /DISCARD/ :
  12. {
  13. *(.comment)
  14. }
  15. }
Makefile
  1. 1 tinyhelloworld: tinyhelloworld.c
  2. 2 arm-linux-gcc -c -fno-builtin tinyhelloworld.c
  3. 3 arm-linux-ld -static -T tinyhelloworld.lds -o tinyhelloworld -Map boot.map tinyhelloworld.o
  4. 4 clean:
  5. 5 -rm tinyhelloworld *.o *.map
阅读(2294) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~