熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

init

2013-11-13 09:55:50  來源: .NET編程 

  在uclinux啟動時有一個默認的初始線程uclinux用一個union來保存這個線程的數據其定義在arch/blackfin/kenel/init_taskc中

  /*

  * Initial thread structure

  *

  * We need to make sure that this is byte aligned due to the

  * way process stacks are handled This is done by having a special

  * init_task linker map entry

  */

  union thread_union init_thread_union

  __attribute__ ((__section__(datainit_task))) = {

  INIT_THREAD_INFO(init_task)}

  thread_union的定義在include/linux/shedh中

  union thread_union {

  struct thread_info thread_info

  unsigned long stack[THREAD_SIZE/sizeof(long)]

  }

  其中THREAD_SIZE的定義在include/asm/thread_infoh中

  /*

  * Size of kernel stack for each process This must be a power of ……

  */

  #define THREAD_SIZE /* pages */

  此union中的thread_info這個結構體我們暫且不管(因為目前還不需要使用到它)先看看heads中與此union相關的部分

  /*

  * load the current thread pointer and stack

  */

  rl = _init_thread_union

  rh = _init_thread_union

  rl = x // 字節

  rh = x

  r = r + r

  sp = r

  usp = sp

  fp = sp

  也就是說在初始化的時候將FP和SP都指向了stack的最高位置它並沒有使用thread_info這個結構體

  猜想uclinux應該是把前面的啟動過程都當成一個特殊的線程看待這個線程從heads的第一行語句開始一直工作到內核啟動完成


From:http://tw.wingwit.com/Article/program/net/201311/12009.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.