】對於交叉工具鏈來說,uclibc一般都是包括在工具鏈裡面的。通過uclibc,大家可以像開發x86使用者程式一樣,開發其他cpu上的應用程式。uclibc相比較glibc而言,包含的檔案較少,功能也有刪減,且每乙個目錄代表乙個動態庫,閱讀起來基本不會遇到什麼問題。
1、uclibc的**怎麼看?
建議直接在github上找乙個uclibc來看,比如
2、uclibc看什麼?
建議前期看ld.so和libc.so的源**,後期可以看其他動態庫的**
3、ld.so和libc.so作用是什麼?
ld.so主要負責動態庫載入、.got.plt填充,libc.so主要負責記憶體分配、signal、字元處理等函式
4、ld.so、libc.so是使用者程式嗎?
和hello_world一樣,所有資源依賴於syscall
5、ld.so、libc.so和syscall有什麼關係?
ld.so和libc.so可能用到syscall,也可能用不到
比如malloc中的記憶體分配肯定用到syscall,但是strlen沒有用到
此外,乙個動態庫api可能涉及到幾個syscall,這都是有可能的
6、ld.so、libc.so和kernel是怎麼互動的
首先execve執行函式,交給ld.so之後,繼續完成剩下的工作,接著跳到libc.so裡面的main函式
7、乙個完整程式需要哪些工具的配合?
首先鏈結器負責.got.plt、.plt建立
接著作業系統負責fork、execve、open、read、write操作、主要是將檔案讀到記憶體,同時將引數傳給載入器
最後載入器完成可執行檔案的執行工作
8、static鏈結時,是不是就用不到uclibc了?
不是,static鏈結時,ld.so、libc.so等動態庫裡面的函式就全部留在執行檔案裡面了,這一點可以通過反彙編可以看的出來
9、uclibc為什麼要和kernel共享一些資料結構?
kernel需要在使用者syscall的時候得處理一些資料,這些資料格式必須保持一致
10、了解uclibc的好處是什麼?
克服對嵌入式的畏懼,除錯軟體更加得心應手
ps:gcc交叉工具鏈一般要編譯兩遍,就是一次不支援動態庫。待用第一次編譯得到的gcc編譯uclibc之後,再編譯一次支援動態庫的gcc。
隨想錄(zynq學習)
最近學習zynq較多,這裡做乙個筆記,供日後參考使用。zynq是xilinx公司出的一款soc,上面包含有雙核arm9 fpga,arm9可以執行裸機程式或者是linux,fpga可以做一些定製化的硬體開發,比如說10個以上的串列埠等等。1 開發板 目前學習zynq使用zedboard較多,上可以購...
軟體隨想錄
最近閱讀了由阮一峰翻譯的,有程式設計師部落酋長之稱的 joel 撰寫的 軟體隨想錄 精華摘抄如下 就如同所有行業最好的人才一樣,那些優秀的程式設計師是不會出現在招聘市場的。通常優秀的程式設計師在整個職業生涯中,可能會有4次求職。實習生制度創造了輸送優秀人才的管道,但是這個管道比較長,而且一路上損耗很...
專案隨想錄
發現自己不怎麼會起題目了。中午回去還沒走到寢室,就接到劉老師的 說要把程式調通,於是中午吃完飯立馬跑回去,把顯示問題解決了。其實那個無效數字問題是因為在hql語句中使用了cast pw as integer 將字串轉成integer型,可是資料庫中的內容程式設計了字母加數字,自然會轉換失敗了,唉,真...