看板 Linux 關於我們 聯絡資訊
※ 引述《phkmalloc (earnest)》之銘言: : 我寫了一個hello world 如下 : int main() { : printf("hello world\n"); : return 0; : } : 我想知道這個main.c在做了static linking 之後, : printf 產生出來的object level code 會是哪些? : (這裡可能會有點誤解,其實我是已經知道產生出來的object level code是哪些, : 但是我想知道printf call vfprintf 之後,是用哪些system call 來產生出這個 : object level code。) 你所使用的 toolchain 裡, 應該有 strace 及 ltrace 這兩個工具吧?! ltrace 可以看 printf 是呼叫了哪些 functions (我猜想這應該是你所謂的 object level code 吧) 然而 strace 則是追蹤該程式執行的過程中呼叫了哪些 system call. 目前的 GNU libc, 大都是用 write() 這個 system call 去做 printf() 至於怎麼追這些 system calls, 每個 device 會有屬於自己的 system calls, 當你想追 printf 時, 你要搭配 init.c 來看, 才有個頭, 因為 init.c 裡, 會 open default console device. 針對該 console device, 再去找它所對 應的 open(), close(), read(), write() ...等. 另外, kernel source 裡的 printk.c 對你而言, 應該也是一個不錯的參考. : architecture 是 ARM : linux : 2.4 or 2.6 都可以 : ------------------ : 上面的問題如果解釋的不清楚,我想就問: linux 在implement ARM system call : 的方式 要去哪裡找? : 目前 在<linux2.4>/include/asm-arm/unistd.h 有找到一些system call 的asm : 其他不知道該怎樣追下去 ? : 謝謝 你可以先由 x86 的 kernel 開始練習, 再試著去追 ARM 的, 因為練習過程中, 你會需要使用 printk() 去驗證你的想法對還是不對. 而 x86 的 kernel 安裝 及啟動, 都比在裝置上簡單且安全許多. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 60.249.207.134