阅 读 文 章

linux内核原代码init/main的注释

[来源:网上转载 (http://www.chinaunix.net) | 作者:网友(不详) | 时间:2007-07-07 | 浏览:人次 ]

  #define __LIBRARY__
  #include
  #include
  /*
  * we need this inline - forking from kernel space will result
  * in NO COPY ON WRITE (!!!), until an execve is executed. This
  * is no problem, but for the stack. This is handled by not letting
  * main() use the stack at all after fork(). Thus, no function
  * calls - which means inline code for fork too, as otherwise we
  * would use the stack upon exit from 'fork()'.
  *
  * Actually only pause and fork are needed inline, so that there
  * won't be any messing with the stack from main(), but we define
  * some others too.
  */
  static inline _syscall0(int,fork) @@定义fork
  --sys_fork在unistd.h中定义syscall0
  static inline _syscall0(int,pause)
  static inline _syscall0(int,setup)
  static inline _syscall0(int,sync)

#include
  #include
  #include
  #include
  #include

#include
  #include
  #include
  #include
  #include

#include

static char printbuf[1024];

extern int vsprintf();
  extern void init(void);
  extern void hd_init(void);
  extern long kernel_mktime(struct tm * tm);
  extern long startup_time;

/*
  * Yeah, yeah, it's ugly, but I cannot find how to do this correctly
  * and this seems to work. I anybody has more info on the real-time
  * clock I'd be interested. Most of this was trial and error, and some
  * bios-listing reading. Urghh.
  */

#define CMOS_READ(addr) ({ \
  outb_p(0x80|addr,0x70); \
  inb_p(0x71); \
  })

#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)

static void time_init(void)
  {
  struct tm time;

do {
   time.tm_sec = CMOS_READ(0);
   time.tm_min = CMOS_READ(2);
   time.tm_hour = CMOS_READ(4);
   time.tm_mday = CMOS_READ(7);
   time.tm_mon = CMOS_READ(8)-1;
   time.tm_year = CMOS_READ(9);
  } while (time.tm_sec != CMOS_READ(0));
  BCD_TO_BIN(time.tm_sec);
  BCD_TO_BIN(time.tm_min);
  BCD_TO_BIN(time.tm_hour);
  BCD_TO_BIN(time.tm_mday);
  BCD_TO_BIN(time.tm_mon);
  BCD_TO_BIN(time.tm_year);
  startup_time = kernel_mktime(&time);
  }

void main(void) /* This really IS void, no error here. */
  { /* The startup routine assumes (well, ...) this */
  /*
  * Interrupts are still disabled. Do necessary setups, then
  * enable them
  */
  time_init();
  tty_init();

论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 注释 代码 void #include int fork static CMOS_READ

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.