免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5735 | 回复: 15
打印 上一主题 下一主题

编译HELLO模块 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-09 16:10 |只看该作者 |倒序浏览

  1. minuit@suse:~/c++/temp> cat hello.c
  2. /*hello.c a module programm*/
  3. /* the program runing under kernel mod and it is a module*/
  4. #include"linux/kernel.h"
  5. #include"linux/module.h"
  6. /* pross the CONFIG_MODVERSIONS*/
  7. #if CONFIG_MODVERSIONS==1
  8. #define MODVERSIONS
  9. #include"linux/modversions.h"
  10. #endif
  11. /* the init function*/
  12. int init_module()
  13. {
  14.         printk(" hello world !n");
  15.         printk(" I have runing in a kerner mod@!!\n");
  16.         return 1;
  17. }
  18. /* the distory function*/
  19. int cleanup_module()
  20. {
  21.         printk(" I will shut down myself in kernerl mod \n");
  22.         return 0;
  23. }
  24. minuit@suse:~/c++/temp> minuit@suse:~/c++/temp> cat makefile
  25. CC=gcc
  26. MODCFLAGS:= -Wall -DMODULE  -DCONFIG_KERNELD -D__KERNEL__ -Dlinux
  27. hello.o:hello.c /usr/inculde/linux/version.h
  28.         CC $(MODCFLAGS) -c hello.c
  29.         echo the module is complie completely
  30. minuit@suse:~/c++/temp>                          
复制代码

刚看到网上很多文章里有这个hello程序错都错成一样的,为什么这个编译不了呀是不是跟系统有关还是有什么选项没加上
错误太多没贴上希望大伙给指导一下

论坛徽章:
0
2 [报告]
发表于 2006-10-09 16:24 |只看该作者

  1. minuit@suse:~/c++/temp> make
  2. gcc  -Wall -DMODULE -D__KERNEL__ -Dlinux  -c hello.c
  3. In file included from /usr/include/asm/pda.h:4,
  4.                  from /usr/include/asm-x86_64/thread_info.h:14,
  5.                  from /usr/include/asm/thread_info.h:4,
  6.                  from /usr/include/linux/thread_info.h:21,
  7.                  from /usr/include/linux/preempt.h:10,
  8.                  from /usr/include/linux/spinlock.h:52,
  9.                  from /usr/include/linux/capability.h:45,
  10.                  from /usr/include/linux/sched.h:7,
  11.                  from /usr/include/linux/module.h:10,
  12.                  from hello.c:4:
  13. /usr/include/asm-x86_64/pda.h:28: error: ‘CONFIG_X86_L1_CACHE_SHIFT’ undeclared here (not in a function)
  14. /usr/include/asm-x86_64/pda.h:28: error: requested alignment is not a constant
  15. In file included from /usr/include/asm/spinlock.h:4,
  16.                  from /usr/include/linux/spinlock.h:89,
  17.                  from /usr/include/linux/capability.h:45,
  18.                  from /usr/include/linux/sched.h:7,
  19.                  from /usr/include/linux/module.h:10,
  20.                  from hello.c:4:
  21. /usr/include/asm-x86_64/spinlock.h: In function ‘__raw_spin_lock’:
  22. /usr/include/asm-x86_64/spinlock.h:42: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  23. /usr/include/asm-x86_64/spinlock.h: In function ‘__raw_read_lock’:
  24. /usr/include/asm-x86_64/spinlock.h:96: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  25. /usr/include/asm-x86_64/spinlock.h:96: error: expected expression before ‘else’
  26. /usr/include/asm-x86_64/spinlock.h: In function ‘__raw_write_lock’:
  27. /usr/include/asm-x86_64/spinlock.h:101: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  28. /usr/include/asm-x86_64/spinlock.h:101: error: expected expression before ‘else’
  29. In file included from /usr/include/asm/processor.h:4,
  30.                  from /usr/include/asm-x86_64/timex.h:14,
  31.                  from /usr/include/asm/timex.h:4,
  32.                  from /usr/include/linux/timex.h:61,
  33.                  from /usr/include/linux/sched.h:11,
  34.                  from /usr/include/linux/module.h:10,
  35.                  from hello.c:4:
  36. /usr/include/asm-x86_64/processor.h: At top level:
  37. /usr/include/asm-x86_64/processor.h:225: error: requested alignment is not a constant
  38. In file included from /usr/include/linux/sched.h:12,
  39.                  from /usr/include/linux/module.h:10,
  40.                  from hello.c:4:
  41. /usr/include/linux/jiffies.h:33:3: error: #error You lose.
  42. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  43. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  44. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  45. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  46. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  47. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  48. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  49. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  50. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  51. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  52. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  53. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  54. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  55. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  56. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  57. /usr/include/linux/jiffies.h:204:31: error: division by zero in #if
  58. /usr/include/linux/jiffies.h:248:46: error: division by zero in #if
  59. In file included from /usr/include/linux/sched.h:12,
  60.                  from /usr/include/linux/module.h:10,
  61.                  from hello.c:4:
  62. /usr/include/linux/jiffies.h: In function ‘jiffies_to_msecs’:
  63. /usr/include/linux/jiffies.h:253: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  64. /usr/include/linux/jiffies.h:253: error: (Each undeclared identifier is reported only once
  65. /usr/include/linux/jiffies.h:253: error: for each function it appears in.)
  66. /usr/include/linux/jiffies.h:259:46: error: division by zero in #if
  67. /usr/include/linux/jiffies.h: In function ‘jiffies_to_usecs’:
  68. /usr/include/linux/jiffies.h:264: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  69. /usr/include/linux/jiffies.h:272:46: error: division by zero in #if
  70. /usr/include/linux/jiffies.h: In function ‘msecs_to_jiffies’:
  71. /usr/include/linux/jiffies.h:277: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  72. /usr/include/linux/jiffies.h:285:46: error: division by zero in #if
  73. /usr/include/linux/jiffies.h: In function ‘usecs_to_jiffies’:
  74. /usr/include/linux/jiffies.h:290: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  75. /usr/include/linux/jiffies.h: In function ‘timespec_to_jiffies’:
  76. /usr/include/linux/jiffies.h:309: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  77. /usr/include/linux/jiffies.h:311: error: ‘SHIFT_HZ’ undeclared (first use in this function)
  78. /usr/include/linux/jiffies.h: In function ‘jiffies_to_timespec’:
  79. /usr/include/linux/jiffies.h:328: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  80. /usr/include/linux/jiffies.h: In function ‘timeval_to_jiffies’:
  81. /usr/include/linux/jiffies.h:350: error: ‘SHIFT_HZ’ undeclared (first use in this function)
  82. /usr/include/linux/jiffies.h:350: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  83. /usr/include/linux/jiffies.h: In function ‘jiffies_to_timeval’:
  84. /usr/include/linux/jiffies.h:366: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  85. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  86. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  87. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  88. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  89. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  90. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  91. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  92. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  93. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  94. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  95. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  96. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  97. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  98. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  99. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  100. /usr/include/linux/jiffies.h:379:6: error: division by zero in #if
  101. /usr/include/linux/jiffies.h: In function ‘jiffies_to_clock_t’:
  102. /usr/include/linux/jiffies.h:380: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  103. /usr/include/linux/jiffies.h: In function ‘clock_t_to_jiffies’:
  104. /usr/include/linux/jiffies.h:391: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  105. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  106. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  107. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  108. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  109. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  110. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  111. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  112. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  113. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  114. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  115. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  116. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  117. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  118. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  119. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  120. /usr/include/linux/jiffies.h:410:6: error: division by zero in #if
  121. /usr/include/linux/jiffies.h: In function ‘jiffies_64_to_clock_t’:
  122. /usr/include/linux/jiffies.h:411: error: ‘CONFIG_HZ’ undeclared (first use in this function)
  123. In file included from /usr/include/linux/sched.h:15,
  124.                  from /usr/include/linux/module.h:10,
  125.                  from hello.c:4:
  126. /usr/include/linux/cpumask.h: At top level:
  127. /usr/include/linux/cpumask.h:88: error: ‘CONFIG_NR_CPUS’ undeclared here (not in a function)
  128. In file included from /usr/include/linux/rwsem.h:27,
  129.                  from /usr/include/asm-x86_64/semaphore.h:43,
  130.                  from /usr/include/asm/semaphore.h:4,
  131.                  from /usr/include/linux/sched.h:20,
  132.                  from /usr/include/linux/module.h:10,
  133.                  from hello.c:4:
  134. /usr/include/asm/rwsem.h:6:2: warning: #warning rwsem.h is not supported on X86-64
  135. In file included from /usr/include/asm/semaphore.h:4,
  136.                  from /usr/include/linux/sched.h:20,
  137.                  from /usr/include/linux/module.h:10,
  138.                  from hello.c:4:
  139. /usr/include/asm-x86_64/semaphore.h: In function ‘down’:
  140. /usr/include/asm-x86_64/semaphore.h:112: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  141. /usr/include/asm-x86_64/semaphore.h: In function ‘down_interruptible’:
  142. /usr/include/asm-x86_64/semaphore.h:137: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  143. /usr/include/asm-x86_64/semaphore.h: In function ‘down_trylock’:
  144. /usr/include/asm-x86_64/semaphore.h:161: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  145. /usr/include/asm-x86_64/semaphore.h: In function ‘up’:
  146. /usr/include/asm-x86_64/semaphore.h:184: error: expected ‘:’ or ‘)’ before ‘KBUILD_BASENAME’
  147. In file included from /usr/include/asm/smp.h:4,
  148.                  from /usr/include/linux/smp.h:19,
  149.                  from /usr/include/linux/sched.h:26,
  150.                  from /usr/include/linux/module.h:10,
  151.                  from hello.c:4:
  152. /usr/include/asm-x86_64/smp.h: In function ‘hard_smp_processor_id’:
  153. /usr/include/asm-x86_64/smp.h:78: error: ‘APIC_BASE’ undeclared (first use in this function)
  154. /usr/include/asm-x86_64/smp.h:78: error: ‘APIC_ID’ undeclared (first use in this function)
  155. /usr/include/asm-x86_64/smp.h: In function ‘cpu_present_to_apicid’:
  156. /usr/include/asm-x86_64/smp.h:113: error: ‘BAD_APICID’ undeclared (first use in this function)
  157. /usr/include/asm-x86_64/smp.h: In function ‘logical_smp_processor_id’:
  158. /usr/include/asm-x86_64/smp.h:136: error: ‘APIC_BASE’ undeclared (first use in this function)
  159. /usr/include/asm-x86_64/smp.h:136: error: ‘APIC_LDR’ undeclared (first use in this function)
  160. In file included from /usr/include/linux/gfp.h:4,
  161.                  from /usr/include/linux/slab.h:15,
  162.                  from /usr/include/linux/percpu.h:5,
  163.                  from /usr/include/linux/sched.h:34,
  164.                  from /usr/include/linux/module.h:10,
  165.                  from hello.c:4:
  166. /usr/include/linux/mmzone.h: At top level:
  167. /usr/include/linux/mmzone.h:41: error: requested alignment is not a constant
  168. /usr/include/linux/mmzone.h:64: error: requested alignment is not a constant
  169. /usr/include/linux/mmzone.h:249: error: requested alignment is not a constant
  170. In file included from /usr/include/linux/sched.h:37,
  171.                  from /usr/include/linux/module.h:10,
  172.                  from hello.c:4:
  173. /usr/include/linux/rcupdate.h:69: error: requested alignment is not a constant
  174. /usr/include/linux/rcupdate.h:72: error: requested alignment is not a constant
  175. In file included from /usr/include/linux/module.h:10,
  176.                  from hello.c:4:
  177. /usr/include/linux/sched.h:309: error: field ‘mmap_sem’ has incomplete type
  178. In file included from /usr/include/linux/module.h:19,
  179.                  from hello.c:4:
  180. /usr/include/linux/kobject.h:167: error: field ‘rwsem’ has incomplete type
  181. hello.c:19: error: conflicting types for ‘cleanup_module’
  182. /usr/include/linux/module.h:67: error: previous declaration of ‘cleanup_module’ was here
  183. make: *** [hello.o] 错误 1
  184. minuit@suse:~/c++/temp>               
复制代码

刚试试就惨不忍睹

论坛徽章:
0
3 [报告]
发表于 2006-10-09 16:28 |只看该作者
建议重写Makefile

2.6上书上那个用不了。其他的就不知道了

论坛徽章:
0
4 [报告]
发表于 2006-10-09 16:34 |只看该作者
http://lwn.net/Articles/21823/


    ifneq ($(KERNELRELEASE),)
    obj-m        := module.o

    else
    KDIR        := /lib/modules/$(shell uname -r)/build
    PWD                := $(shell pwd)

    default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
    endif


有相关module编译的问题?可以看看……

论坛徽章:
0
5 [报告]
发表于 2006-10-09 17:04 |只看该作者
原帖由 lonelyair 于 2006-10-9 16:34 发表
http://lwn.net/Articles/21823/




有相关module编译的问题?可以看看……

谢谢了
我先去试试

论坛徽章:
0
6 [报告]
发表于 2006-10-09 17:53 |只看该作者
我把makefile改了一下

  1. KDIR:=/lib/modules/$(shell uname -r)/build
  2. obj-m:=hello.o
  3. default:
  4.         $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)  modules
  5. clean:
  6.         $(RM) .*.cmd *.o *.ko -r .tmp*
复制代码

错没看见就是不见目录下面生成的模块

  1. make -C /lib/modules/2.6.16.13-4-default/build SUBDIRS=/home/minuit/c++/temp  modules
  2. make[1]: Entering directory `/usr/src/linux-2.6.16.13-4-obj/x86_64/default'
  3. make -C ../../../linux-2.6.16.13-4 O=../linux-2.6.16.13-4-obj/x86_64/default modules
  4.   Building modules, stage 2.
  5.   MODPOST
  6. make[1]: Leaving directory `/usr/src/linux-2.6.16.13-4-obj/x86_64/default
复制代码

论坛徽章:
0
7 [报告]
发表于 2006-10-09 18:30 |只看该作者
原帖由 lovesaka 于 2006-10-9 17:53 发表
我把makefile改了一下
[code]
KDIR:=/lib/modules/$(shell uname -r)/build
obj-m:=hello.o
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD)  modules
clean:
        $(RM) .*.cmd *.o *.ko -r .tmp ...

make clean:有问题试试这样写
obj-m:=${TERGET}.o
KDIR:=/lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)

default %:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
clean:
        rm -rf *.o core mklog
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

论坛徽章:
0
8 [报告]
发表于 2006-10-09 19:29 |只看该作者
2.6生成的模块 扩展名是.ko

论坛徽章:
0
9 [报告]
发表于 2006-10-09 19:31 |只看该作者
原帖由 weiran8 于 2006-10-9 19:29 发表
2.6生成的模块 扩展名是.ko

这样生成的是.ko,.o只是个过度也是必须的。

论坛徽章:
0
10 [报告]
发表于 2006-10-09 19:37 |只看该作者
原帖由 lonelyair 于 2006-10-9 18:30 发表

make clean:有问题试试这样写

两个效果一样呀什么也变呀
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP