内核代码中的: int reboot(int flag) 这个函数在哪里?

ZhangYv 2004-11-11 06:53:21
我需要知道包含在
/usr/include/sys/reboot.h文件中的
extern int reboot (int __howto) __THROW
这个函数的实现在那哪个C程序文件中?内核代码是2.4.20版本。
能否帮我找找?很急的。写过
...全文
372 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
aria 2004-11-18
  • 打赏
  • 举报
回复
就是在redhat 9下编译2.4.27的内核然后安装,重启系统后再reboot,此时可以看到终端上有打印加入的调试信息。reboot的方法是直接用reboot命令。
ZhangYv 2004-11-17
  • 打赏
  • 举报
回复
我在用户态调用了reboot(), 在machine_restart()-->machine_real_restart()加了调试信息,但是这两个函数根本没有执行,这是怎么回事???
ZhangYv 2004-11-17
  • 打赏
  • 举报
回复
不会吧?我测试了半天都不行。楼上你是怎么测试得?
aria 2004-11-17
  • 打赏
  • 举报
回复
手头没有2.4.20的内核,用redhat 9 + 2.4.27内核在x86上测试的结果是machine_restart()有调用,测试方法是在arch/i386/kernel/process.c中machine_restart()的开始加了一句打印和延时。是否你加的调试信息位置不对?
aria 2004-11-14
  • 打赏
  • 举报
回复
不是很明白,如果是在用户态调用reboot(),x86体系最终是会调用到内核中的sys_reboot()-->machine_restart()-->machine_real_restart(),只要修改相应位置应就可以了吧
ZhangYv 2004-11-12
  • 打赏
  • 举报
回复
我不明白,我现在需要得是reboot的源代码,并且我要修改它。这和syscall有什么关系?具体的说:
reboot的最后一步是跳到ljmp 0xffff, 0x0000的BIOS处重新开始自检,我现在要让它ljmp 0x0000, 0x7c00处,并且在跳转之前,我需要做一些预处理(比如验证权限和加载)的事情。syscall可以实现么?
zhouqingyuan 2004-11-11
  • 打赏
  • 举报
回复
我是来帮你顶的!!!
Wolf0403 2004-11-11
  • 打赏
  • 举报
回复
所以你需要的就是直接用 syscall 而不是用 reboot
ZhangYv 2004-11-11
  • 打赏
  • 举报
回复
不是啊,我在程序里直接调用
reboot(0x1234567); //让系统重启

但是reboot函数不能满足我当前的需要,所有我要进行修改,所以要直接找到reboot的实现然后修改代码。
Wolf0403 2004-11-11
  • 打赏
  • 举报
回复
syscall(sys_reboot, ...)
ZhangYv 2004-11-11
  • 打赏
  • 举报
回复
就是调用时候就是reboot(magic),让系统重启,我需要修改这个函数,但是没地方找在哪里,应该不在process.c中。希望高人出手帮助。

4,436

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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