LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 599|回复: 0

请教大家一个ld脚本的问题

[复制链接]
发表于 2010-7-15 15:33:35 | 显示全部楼层 |阅读模式
大家好,请教大家一个链接脚本的问题:
main.c

  1. #include <stdio.h>

  2. typedef struct
  3. {
  4.         const char *name;
  5.         void (*func)(void);
  6. } S_NEWDATA;

  7. #define __add_to_newdata(x) const S_NEWDATA x __attribute__ ((section(".newdata")))

  8. static void func1(void)
  9. {
  10.         printf("%s\n", __func__);
  11. }

  12. static void func2(void)
  13. {
  14.         printf("%s\n", __func__);
  15. }

  16. __add_to_newdata(newdata1) = {
  17.         "data1",
  18.         func1,
  19. };

  20. __add_to_newdata(newdata2) = {
  21.         "data2",
  22.         func2,
  23. };

  24. extern unsigned int __newdata_addr_start;
  25. extern unsigned int __newdata_addr_end;

  26. int main()
  27. {
  28.         const char *name = "data2";
  29.         S_NEWDATA *p = (S_NEWDATA *)&__newdata_addr_start;

  30.         while (p++ <= (S_NEWDATA *)&__newdata_addr_end) {
  31.                 if (p->name == name) {
  32.                         p->func();
  33.                         break;
  34.                 }
  35.         }
  36. }
复制代码


ldscript.ld

  1. SECTIONS
  2. {
  3.         .text : { *(.text) }

  4.         . = 0x6000000 ;
  5.         .newdata :
  6.         {
  7.                 __newdata_addr_start = . ;
  8.                 *(.newdata)
  9.                 __newdata_addr_end = . ;
  10.         }

  11.         . = 0x8000000 ;
  12.         .data : { *(.data) }
  13.         .bss : { *(.bss) }
  14. }
复制代码


想模仿驱动的结构实现模块化,看了脚本的教程,没有完全理解。上面的脚本是错误的,错在哪里呢?正确的又该怎么写?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表