<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 低固存嵌入式系統的uClinux小型化方法

低固存嵌入式系統的uClinux小型化方法

作者: 時(shí)間:2011-06-21 來(lái)源:網(wǎng)絡(luò ) 收藏
1.2.1 對調用的影響

本文引用地址:http://dyxdggzs.com/article/150585.htm

  調用約有177個(gè),包括關(guān)于進(jìn)程的調用函數、文件的調用函數,以及其它相關(guān)的調用,其中文件的調用占了71個(gè)。由于沒(méi)有根系統,系統調用中涉及到從根文件系統上或掛接在它某個(gè)文件節點(diǎn)上的其它文件系統上,裝載、執行可執行文件的系統調用都是沒(méi)必要的,所以必須做相應的更改。典型的是系統調用execve(),其執行流程主干線(xiàn)如圖2所示。

  exeeve()

  ↓

  do_exeeve()

  ↓

  open_execve()

  ↓

  prepare_binpma()

  ↓

  search_binary_hanlder()

  圖2 execve()執行流程

  do_execve()是execve()的核心,它調用open_exec()尋找可執行文件并打開(kāi),函數open_exec()返回一個(gè)file結構指針,代表著(zhù)讀入可執行文件的上下文,將其保存在數據結構bprm中。然后調用prepare_binprm()完成對bprm的進(jìn)一步工作,包括從可執行文件頭讀取相關(guān)信息,以及拷貝運行環(huán)境參數等到bprm 中。內核中有一個(gè)叫formats的隊列,隊列中的每個(gè)成員只認識并且處理一種特定格式的可執行文件的運行。search_binary_handler()就是在formats的隊列中,尋找跟bprm中信息相符的一個(gè)成員,并由此成員來(lái)完成可執行文件的裝載并初始化運行。由于不存在從文件系統加載可執行文件,所以bpma數據結構,及涉及prepare_binprm(),search_binary_hanlder()等相關(guān)操作都是可以刪除的。

  再者,由于沒(méi)有可供mount的文件節點(diǎn),所以有關(guān)掛接的系統調用也必須做出調整。比如:mount()是用于文件系統掛接的系統調用,完全可以刪去;內核函數mount_root()在初始化時(shí)用于安裝根文件系統,也是可以刪去的;vfsmount()是內核數據結構,用于描述掛載節點(diǎn)的信息,包括掛載點(diǎn)的根目錄,被掛載系統的級塊指針等信息。vfsmount()完全是跟掛載有關(guān)的,可以將它刪除,同時(shí)內核中有好多涉及操作此數據結構的函數也必須做出更改。比如alloc_vfsmnt()和free_vfsmnt()是分配和釋放vfsmount結構,完全可以刪去,但有些內核函數只有一部分涉及到對vfsrmnt結構的操作,所以不能全部刪除,必須對相應部分做出修改。

  1.2.2 對內核啟動(dòng)初始化的影響

  由于init()進(jìn)程不能從根文件系統加載,所以凡是涉及根文件系統初始化函數的都必須刪除,以支持內核與應用程序一體化。初始化進(jìn)程init代碼如下:

  static int init(void *unused)

  {……

  if(open(/dev/console,O_RDWR,0) 0)

  ……

  if(execute_command)

  execve(execute_command,argv_init,envp_init);

  execve(/sbin/init,argv_init;envp_init);

  ……

  panic(No init found.Try passing init= option to kernel);

  }

  init()完成系統的初始化,包括外部設備的初始化,釋放init()前初始化后代碼占用的內存,以及控制臺的初始化,最后從根文件系統加載整個(gè)系統的第一個(gè)進(jìn)程init,它是所有進(jìn)程的“鼻祖”。由于根文件的刪除,所以可以刪除控制臺以及調用init進(jìn)程。

  1.2.3 對ReFS和外部設備的影響

  ReFS可以像mount_root()那樣直接把ReFS當成根文件系統來(lái)裝,但它并不像根文件系統那樣有bash,gretty等應用程序,也不具備掛載其它系統的能力,所以不是真正的根文件系統。內核中有幾個(gè)根文件系統和外設相關(guān)的重要內核級全局變量:file_system_type,btkdevs[MAX_BLKDEV],chrdevs[MAX_CHRDEV],super_block。

  file_system_type是一個(gè)描述系統中所有支持的文件系統的數據結構。VFS在內存中維護這樣一個(gè)數據結構的列表,全局指針變量為file_systems。新文件系統必須通過(guò)register_filesystem()來(lái)注冊以讓系統識別,即是在鏈表file_systems結尾插人一個(gè)file_systm_type數據結構。blkdevs[MAX_BLKDEV]和chrdevs[MAX_CHRDEV]分別為塊設備和字符設備的注冊數組,包含主設備號和次設備號,以及有關(guān)設備操作的跳轉指針。塊設備和字符設備分別通過(guò)register_blkdev()和register_chrdev()向系統注冊設備。super_block是超級塊數據結構,存放著(zhù)整個(gè)文件系統的信息和超級塊操作的函數。在通用內核中根文件系統的安裝的順序是:從file_systems處取得根文件系統的read_super(),read_super()指向具體的驅動(dòng)程序讀操作,通過(guò)讀取得超級塊,然后在內存中創(chuàng )建inode,file,dentry等數據結構,用于文件的讀寫(xiě)操作。

  在這里,同樣可以用與根文件系統相同的裝載來(lái)初始化ReFS,但是比前者簡(jiǎn)單多,因為后者不涉及安裝掛載點(diǎn)及與此相關(guān)的操作。對于外設,內核一般是通過(guò)根文件系統搜索到設備文件,再來(lái)訪(fǎng)問(wèn)外設,當中要涉及到搜索路徑和掛接點(diǎn)到外設翻譯的問(wèn)題,而在這里外設是獨立的,不依賴(lài)于根系統,所以實(shí)現起來(lái)更簡(jiǎn)單,可以直接依據內核數據結構blkdevs[]和chrdevs[]提供的操作函數表指針,來(lái)操作具體的驅動(dòng)程序操作外設。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

linux相關(guān)文章:linux教程




關(guān)鍵詞: 方法 小型化 uClinux 系統 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>