繼續上一篇..準備 "sh"
就準備一個 名叫"sh" 的執行檔讓kernel load 就可以了..
標準的 hello.c:
#include
#include
#include
void main(int argc,char* argv[])
{
setsid();
(void) open("/dev/tty0",O_RDWR,0);
(void) dup(0);
(void) dup(0);
write(1,"Hello!\n",strlen("Hello!\n"));
_exit(2);
}
因為 Linux 0.01 提供的 function 不多,所以要這樣寫 (這是參考 linux 0.01 gcc4.0 port的
作者網站資料)。
另外 該作者也已經修改 kernel,從a.out格式改為 elf格式。所以直接用 gcc 4.0 build就可以囉!
gcc -o hello hello.c -nostdlib -nostdinc -e main
-Ttext=100 -static -fno-builtin
../linux-0.01-rm-3.5/lib/lib.a
-I../linux-0.01-rm-3.5/include
上面是build的command。
就是要指定不使用stdlib,stdinc。
改指定 linux0.01中的lib.a和 include。
build完後,再把剛剛的 root hd image mount 回來,create bin directory,再把hello copy到 bin中,rename成 sh就可以了。
這樣開機message在 Ok. 後,就會出現 Hello!
代表剛剛寫的 hello.c 真的被kernel load進去執行囉!
沒有留言:
張貼留言