当前位置: 技术问答>linux和unix
急,高手来看看(送100分)
来源: 互联网 发布时间:2015-02-28
本文导语: 小弟在做添加系统调用的时候遇到一些问题 步骤如下: (1)添加代码 /usr/scr/linux/kernel/sys.c asmlinkage int sys_copy() { char oldname[100],newname[100]; printf("pl...
小弟在做添加系统调用的时候遇到一些问题
步骤如下:
(1)添加代码 /usr/scr/linux/kernel/sys.c
asmlinkage int sys_copy()
{
char oldname[100],newname[100];
printf("please enter the old filename:");
scanf("%s",oldname);
printf("please enter the new filename:");
scanf("%s",newname);
link(oldname,newname);
}
(2)/usr/scr/linux/include/asm-i386/unistd.h
增加 #define __NR_copy 239
(3)/usr/scr/linux/arch/i386/kernel/entry.s
增加 .long SYMBOL_NAME(copy)
(4) 重建内核
#make config
#make dep
#make clearn
#make bzImage
问题:在最后编译内核时系统提示
printf没有定义
scanf没有定义
link没有定义
不解,非常急,请高手指点
步骤如下:
(1)添加代码 /usr/scr/linux/kernel/sys.c
asmlinkage int sys_copy()
{
char oldname[100],newname[100];
printf("please enter the old filename:");
scanf("%s",oldname);
printf("please enter the new filename:");
scanf("%s",newname);
link(oldname,newname);
}
(2)/usr/scr/linux/include/asm-i386/unistd.h
增加 #define __NR_copy 239
(3)/usr/scr/linux/arch/i386/kernel/entry.s
增加 .long SYMBOL_NAME(copy)
(4) 重建内核
#make config
#make dep
#make clearn
#make bzImage
问题:在最后编译内核时系统提示
printf没有定义
scanf没有定义
link没有定义
不解,非常急,请高手指点
|
内核中不能用用户空间的函数(printf, scanf等等),要用对应的内核函数代替。
printf可用printk,scanf函数没有对应的内核版本,因为内核不可能去等待输入,link本身就是系统调用,直接用对应的内核函数,可能是sys_link。
总之,内核跟用户空间的程序是两个概念,很多在用户空间的东西在内核中是行不通的!
printf可用printk,scanf函数没有对应的内核版本,因为内核不可能去等待输入,link本身就是系统调用,直接用对应的内核函数,可能是sys_link。
总之,内核跟用户空间的程序是两个概念,很多在用户空间的东西在内核中是行不通的!