Linux开发新手。请问syscalls怎么使用

Paradin 2007-11-05 10:50:38
下面是R&K 第八章系统调用的第一个例子:

#include <linux/syscalls.h>

int main() /* copy input to output */
{
char buf[BUFSIZ];
int n;
while ((n = read(0, buf, BUFSIZ)) > 0)
write(1, buf, n);
return 0;
}

fc7下
设置了 C_INCLUDE_PATH=/usr/src/kernels/2.6.22.9-91.fc7-i686/include
为什么还是有这么多错误? 应该如何编译?

**** Build of configuration Debug for project CTest ****

make all
Building file: ../main.c
Invoking: GCC C Compiler
gcc -I/usr/src/kernels/2.6.22.9-91.fc7-i686/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o" "../main.c"
在包含自 /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:61 的文件中,
从 ../main.c:1:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/list.h:970:2: 警告:#warning "don't include kernel headers in userspace"
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/siginfo.h:5,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:65,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm-generic/siginfo.h:58: 错误:数组 ‘_pad’ 太大
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/bitops.h:10,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitops.h:10,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cpufeature.h:12,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:17,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/alternative.h:9: 错误:expected specifier-qualifier-list before ‘u8’
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/bitops.h:409,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitops.h:10,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cpufeature.h:12,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:17,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm-generic/bitops/fls64.h: 在函数 ‘fls64’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm-generic/bitops/fls64.h:10: 警告:隐式声明函数 ‘fls’
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cpufeature.h:12,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:17,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitops.h: 在函数 ‘hweight_long’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitops.h:31: 警告:隐式声明函数 ‘hweight32’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitops.h:31: 警告:隐式声明函数 ‘hweight64’
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/system.h:8,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:19,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h: 在顶层:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:213: 错误:expected declaration specifiers or ‘...’ before ‘u8’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:213: 错误:expected declaration specifiers or ‘...’ before ‘u8’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:214: 错误:expected declaration specifiers or ‘...’ before ‘u16’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:214: 错误:expected declaration specifiers or ‘...’ before ‘u16’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:215: 错误:expected declaration specifiers or ‘...’ before ‘u32’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:215: 错误:expected declaration specifiers or ‘...’ before ‘u32’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h: 在函数 ‘cmpxchg_386’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:222: 错误:提供给函数 ‘cmpxchg_386_u8’ 的实参太多
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:224: 错误:提供给函数 ‘cmpxchg_386_u16’ 的实参太多
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/cmpxchg.h:226: 错误:提供给函数 ‘cmpxchg_386_u32’ 的实参太多
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:19,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/system.h: 在函数 ‘sched_cacheflush’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/system.h:319: 警告:隐式声明函数 ‘wbinvd’
In file included from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/cpumask.h:87,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/processor.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/asm/atomic.h:6,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/key.h:23,
from /usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/syscalls.h:68,
from ../main.c:2:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h: 在函数 ‘bitmap_zero’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:134: 错误:‘BITS_PER_LONG’ 未声明 (在此函数内第一次使用)
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:134: 错误:(即使在一个函数内多次出现,每个未声明的标识符在其
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:134: 错误:所在的函数内只报告一次。)
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:137: 警告:隐式声明函数 ‘BITS_TO_LONGS’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:138: 警告:隐式声明函数 ‘memset’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:138: 警告:隐式声明与内建函数 ‘memset’ 不兼容
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h: 在函数 ‘bitmap_fill’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:147: 警告:隐式声明与内建函数 ‘memset’ 不兼容
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:149: 错误:‘BITS_PER_LONG’ 未声明 (在此函数内第一次使用)
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h: 在函数 ‘bitmap_copy’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:155: 错误:‘BITS_PER_LONG’ 未声明 (在此函数内第一次使用)
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:159: 警告:隐式声明函数 ‘memcpy’
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:159: 警告:隐式声明与内建函数 ‘memcpy’ 不兼容
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h: 在函数 ‘bitmap_and’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:166: 错误:‘BITS_PER_LONG’ 未声明 (在此函数内第一次使用)
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h: 在函数 ‘bitmap_or’ 中:
/usr/src/kernels/2.6.22.9-91.fc7-i686/include/linux/bitmap.h:175: 错误:‘BITS_PER_LONG’ 未声明 (在此函数内第一次使用)
...
../main.c: 在函数 ‘main’ 中:
../main.c:5: 错误:‘BUFSIZ’ 未声明 (在此函数内第一次使用)
../main.c:7: 警告:隐式声明函数 ‘read’
../main.c:8: 警告:隐式声明函数 ‘write’
../main.c:5: 警告:未使用的变量 ‘buf’
make: *** [main.o] 错误 1
...全文
364 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
czh_ba 2007-11-08
  • 打赏
  • 举报
回复
直接GCC就可以了吧
一个从标准输入到标准输出的程序
又不是驱动的编译
loardo 2007-11-08
  • 打赏
  • 举报
回复
楼主是问如果使用请问syscall。
如果你想直接启动syscall,需要使用int指令。EAX是syscall的调用号。这个号你可以在你的系统目录/usr/include/asm/unistd.h找。
第一个参数EBX,第二个参数ECX,第三个参数EDX,第四个参数ESI,第五个参数EDI.

Paradin 2007-11-06
  • 打赏
  • 举报
回复
那是eclipse调用gcc时加上去的呵。
想调用syscalls.h里的函数不知怎么配置
那谁能给个内核开发的例子看看
babyvox1999 2007-11-05
  • 打赏
  • 举报
回复
linux下写完直接gcc -o XX XX.c不就可以了,你用的什么makefile吗?
gcc -I/usr/src/kernels/2.6.22.9-91.fc7-i686/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF "main.d " -MT "main.d " -o "main.o " "../main.c "
这个编译参数也实在太多了吧
Paradin 2007-11-05
  • 打赏
  • 举报
回复
谢谢。可以把相关的概念说一下吗:)
mymtom 2007-11-05
  • 打赏
  • 举报
回复
楼主应该是在开发应用程序,而不是在进行内核开发,对read和write的调用应该用一下的语法:

#include <unistd.h>

#define BUFSIZ 64

int main(void)
{
char buf[BUFSIZ];
int n;

while ((n = read(0, buf, BUFSIZ)) > 0)
write(1, buf, n);
return 0;
}

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧