這次實驗主要完成一個linux內核的編譯
1. 下載內核文件
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2 tar jvxf linux-2.6.18.1.tar.bz2 cd linux-2.6.18.1 2. 清理已有的設置 make mrproper 3. 下載configure文件 wget http://opencsl.openfoundry.org/setting/linux-2.6.18.config make menuconfig ARCH=arm 4. 編譯內核 make ARCH=arm CROSS_COMPILE=arm-linux-uclibc- 這裏需要在sumversion.c中加入#include <linux/limits.h> 注意需要將auditing選項去掉,參見http://www.shx-arm.com/qianjichu26.aspGeneral setup --->
() Local version - append to kernel release
[*] Support for paging of anonymous memory (swap)
[*] System V IPC
[*] POSIX Message Queues
[*] BSD Process Accounting
[*] BSD Process Accounting version 3 file format
[*] Sysctl support
[ ] Auditing support
(15) Kernel log buffer size (16 => 64KB, 17 => 128KB)
[*] Support for hot-pluggable devices
[*] Kernel Userspace Events
[*] Kernel .config support
[*] Configure standard kernel features (for small systems) --->
http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=231443&start=0
嘗試交叉編譯了ARM-Linux內核,基本方法網上已經有論述,就是下載kernel源代碼,然後
make ARCH=arm menuconfig
make bzImage
然後加載module之類
最後,kernel的image成功生成,但是加載module的時候失敗。分析原因是一些驅動的ko文件沒有
生成,基本的解決思路是在menuconfig裏取消這些驅動。這個問題沒有繼續往下做了,因爲已經花費
了較多時間了。
這個實驗基本瞭解了Kernel內核編譯的流程。注意很多時候,解決Kernel中的問題只需要簡單的取消對應
的選項就好了。因爲現在的Kernel規模很大,對應的drivers之類的也很多,全部選擇很容易出現編譯錯誤。
事實上並不是所有的驅動都需要編譯到Kernel中。
接下來進行操作系統的學習,系統瞭解操作系統的概念,並且開始學習一個小的但是典型的操作系統。