2013年1月14日 星期一

uCLinux--如果沒有...

最近剛剛拜讀完人家,一些在linux底下的loader的機制,也就是牽涉到如何載入share lib跟OS如何分配管理elf程式的部分,回想uCLinux到底有何不同,想不到真的大大不同!!我把uClinux想簡單了

底下是另外一篇解釋uCLinux跟一般linux不一樣的地方,過去總是以為簡單的沒有MMC跟浮點數(floating point)
http://www.linuxjournal.com/article/7221

因為沒有MMU,就不支援Virtual Memory(VM),在這一節上,想不到會有許多差異

直覺,沒有VM,那麼記憶體應該是直接攤在記憶體中,且應該是連續的
因為沒有MMU,過去2^n配置記憶體,考慮到環境,也不可行,必須改用其他演算法,免得有記憶體破碎的問題
Heap要自己管理,也就是可能直接深入kernel,由kernel控制
沒有fork(),讓我實在意外,uCLinux只有提供vfork,使用 vfork() 會使得 parent process suspend 直到child process結束或執行exec()為止。@@a multi-process認知都有點不一樣了,我看muti-thread就更不用想了
只支援 flat executable format (bFLT), 這有兩種型態:
一、code text & data 都是 relocatable
二、使用 PIC 碼 (Position Independent Code)只有部份 data 需要 relocation 即可。
其中第二項衍生出 XIP (eXecute In Place) ,就是程式可以直接在 ROM上面執行的方式,因為 ROM 是 read only,可以被多個 instance share 使用。在這裡似乎uCLinux佔到了一點便宜,因為位址是固定的,外加用事read-only,那麼從新定位code text變成沒有必要的事情,也就是不用plt.got這個表了。可是事情也沒那麼樂觀,因為不是所有的硬體平台都支援PIC orz

回想想用gcc -shared 選項表示使用loading time relocate,但無法幫你在 bFLT格式中製作shared library。 這裡只提一個重要概念,shared library 必須是 XIP ,否則在每個uClinux application 都會產生一份 copy --- 這種情形比 static linking還要糟糕!

也就是說,在uCLinux底下開發程式要注意的點比一般的linux程式還要多的限制,不是簡單換個distribution那樣而已,也不是簡單的抽換到glibc這個lib

沒有留言:

張貼留言