這陣子,一直想做一個自己的 Linux distro,
最主要是想要練功,目前想到要有的功能有
1. Live USB
2. 小且快速
3. 硬體支援盡量好
4. 資料可以存下來
關於第一點,是想要帶著跑,身上只要有支 USB隨身碟,
插上電腦,馬上就可以使用。
第二點,目標想把整體大小壓在 100MB以內,且應用程式不用多,
現在想到要有的 AP有,file browser,web browser,x window,
及window mamager。
第三點,說穿了就是 kernel的選項看要怎麼選。
第四點,由於目前是做 Live USB,所有資料都是跑在記憶體中,
關機資料當然不見,因此這個功能想達成。
一個 Linux distro最基本架構對我來說有三層,
root file system
---------------------
kernel
---------------------
boot loader
---------------------
hardware
最底下 hardware不說,就是 boot loader、kernel及 rootfs這三層,
應用程式或是一堆文件雜要雜八的都屬 rootfs這層。
所以我第一步要先來建立我的 rootfs!
以前用 LFS去從頭到尾建立一個完整的 distro,
雖然花了很多時間,但卻很值得,
因為可以學到很深,很廣,
但它實際做出來的大小其實不小…
幾百 MB吧,
不可否認,toolchain一定會有影響,
gllibc跟 uclibc編一樣的包,大小當然就不同,
自己曾經也有過瘋狂的 porting過,但太花時間跟精力了…
所以就用 buildroot來取代 LFS,
來做我一版 distro的 rootfs吧!!
buildroot可以想像它就是 LFS的自動化腳本,
當選了想要的東西後,打個 make,
就會產生出來,這裡記錄一下我怎麼選的,
$ git clone git://git.buildroot.net/buildroot
$ cd buildroot && make menuconfig
Toolchain --->
Toolchain type (Crosstool-NG toolchain) --->
(X) Crosstool-NG toolchain
Crosstool-NG C library (glibc) --->
(X) glibc
[*] Enable C++ support
System configuration --->
/dev management (Static using device table) --->
(X) Dynamic using udev
Package Selection for the target --->
Graphic libraries and applications (graphic/text) --->
[*] X.org X Window System, X11R7, release 7.5 --->
X Window System server type (TinyX) --->
(X) Modular X.org
X11R7 Applications --->
[*] setxkbmap
[*] twm
[*] xclock
[*] xinit
[*] xinput
[*] xkbcomp
X11R7 Drivers --->
[*] xf86-input-evdev
[*] xf86-input-keyboard
[*] xf86-input-mouse
[*] xf86-video-cirrus
[*] xf86-video-fbdev
[*] xf86-video-vesa
[*] Liberation (Free fonts)
[*] xterm
Hardware handling --->
[*] dbus
[*] enable all extras
[*] usb_modeswitch
[*] usbmount
Libraries --->
Graphics --->
[*] libgtk2
[*] gtk engines
GTK Themes --->
[*] hicolor (default theme)
Text and terminal handling --->
[*] ncurses libpanel in target
[*] ncurses libform in target
[*] ncurses libmenu in target
Networking applications --->
[*] wireless tools
[*] Install shared library
[*] wpa_supplicant
Filesystem images --->
[*] cpio the root filesystem
$ make
這時就會開始 compile,需要一段時間…
這裡附上 config file
結束後,在 $ur_buildroot_location/output/images
會有已壓縮後 rootfs的 tar檔及 cpio檔,
而在 $ur_buildroot_location/output/target
是還沒壓縮後的。
有錯誤,請問大大有遇到問題嗎??
回覆刪除usb_modeswitch.c:66:17: error: usb.h: No such file or directory
請問大大,流程中仍然遇到問題如下:這些過程中有遇到過嗎???
刪除udev/udev-ctrl.o: In function `udev_ctrl_get_connection':
udev-ctrl.c:(.text.udev_ctrl_get_connection+0x41): undefined reference to `accept4'
collect2: ld returned 1 exit status
make[3]: *** [udev/udevd] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [all-recursive] Error 1
make[1]: *** [all] Error 2
make[1]: Leaving directory `/home/xhsiung/gitProject/buildroot/output/build/udev-173'
make: *** [/home/xhsiung/gitProject/buildroot/output/build/udev-173/.stamp_built] Error 2
1. buildroot的版本你用多少的??
回覆刪除上面是我幾個月前試的,那時的版本會跟現在的不太一樣
你找看看你的版本有無,有的話,選起來再編看看
Package Selection for the target --->
Hardware handling --->
[ ] usb_modeswitch (NEW)
2. 那是因為 glibc在 buildroot上預設的版本太舊了,預設是 2.9
你可以打
make ctng-menuconfig
這個可以選你要的 toolchain,包括 GCC,GLIBC等等,
你把 GLBC選到 2.12以上就可以了
感謝大大的回覆~~,我會努力的試試
回覆刪除