![]() |
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
|
Chào mừng đã đến với forum oOo VnSharing oOo. Bạn chưa đăng kí (hoặc chưa đăng nhập) nên quyền lợi của bạn sẽ bị hạn chế. Việc đăng kí làm thành viên hoàn toàn miễn phí, sau khi đăng kí bạn có thể post bài, tham gia thảo luận, liên lạc với các thành viên khác qua hệ thống tin nhắn riêng, yêu cầu manga/anime... và rất nhiều quyền lợi khác. Thủ tục đăng kí rất nhanh chóng và đơn giản, hãy Đăng Kí Làm Thành Viên! Nếu bạn quên mật khẩu, xin nhấn vào đây. Nếu bạn gặp trục trặc trong vấn đề đăng kí hoặc không thể đăng nhập, hãy liên hệ với chúng tôi. |
|
||||||
Chính thức đưa host Mega vào sử dụng
Topic giải quyết việc phá forum của mod kẻ lang thang + Clouds-san
![]() |
|
|
Ðiều Chỉnh | Xếp Bài |
|
|
|
#1
|
||||||||
|
||||||||
|
Hướng dẫn Recompile Kernel Linux 2.6.x, 3.0.x và Compile cho nhánh Debian
Hướng dẫn Recompile Kernel Linux 2.6.x, 3.0.x và Compile cho nhánh Debian Đầu tiên tớ xin nói là việc biên dịch lại (recompile) nhân (kernel) không phải là khó (chỉ cần một chút kiên nhãn là được) nhưng cũng chẳng dễ (yêu cầu tối thiểu bạn phải biết một vài lệnh của Linux) và một...chiếc máy tính trâu một tí. Đối với người dùng Mac, hay Microsoft Windows, việc biên dịch nhân là một khái niệm lạ, vì nhân của chúng hiển nhiên là "đóng" (phần mềm mã nguồn đóng) nên không thể biên dịch lại nhân được. Linux thì nhân của nó là mã nguồn mở, người dùng có thể tải về và biên dịch lại chúng. Lợi điểm của việc này là gì ?
Thường thì kernel của Linux được recompile với hai mục đích chính : - Tối ưu hóa kernel - cái này đã nói ở trên. - Vá lỗi mà không tối ưu hóa, hoặc vá lỗi và tối ưu hóa. Trong tutorial này mình sẽ hướng dẫn các bạn recompile kernel cho hai phiên bản thông dụng cho đến hiện nay : series 2.6.x và series 3.0.x. Series 2.6.x vẫn được dùng cho bản phân phối Ubuntu 11.04 và series 3.0.x được dùng cho phiên bản Ubuntu 11.10. Phiên bản build nhân sẽ là i386, nhưng bạn cũng có thể build cho phiên bản IA64. Đặc biệt sẽ hướng tới việc build nhân cho phiên bản *Ubuntu (Edubuntu, Ubuntu, Kubuntu, Xubuntu, Lubuntu, Mythbuntu, nói chung là nhánh Debian). Các loại build nhân sẽ trình bày trong Tutorial này : - Build nhân thô trên tất cả hệ điều hành Linux (nhân 2.6.x) - Build nhân và đóng gói nhân cho hệ điều hành Linux nhánh Debian (nhân 3.0.x) - Build nhân thô cho hệ điều hành Linux (nhân 3.0.x) Một chiếc máy tính tốt với CPU mạnh nhiều RAM sẽ là lợi thế cho bạn, vì việc build nhân Linux nói chung rất lâu, lâu 'kinh khủng', phải build một nhân chỉ có tầm 10-20MB từ mã nguồn hơn 400MB. Trên một máy tính chạy CPU Celeron D331 2.66 GHz (máy cũ của mình), việc build nhân mất gần 1 tiếng và build module mất hơn 2 tiếng. Bootloader mình khuyên dùng là GRUB 2 (1.99), tức là từ bản Ubuntu 11.04 trở lên. Để phân biệt GRUB 1 và GRUB 2, GRUB 1 lưu config trong /boot/grub/menu.lst, còn GRUB 2 lưu trong /boot/grub/grub.cfg. Về việc đánh số phiên bản nhân : Linux thường đánh số nhân theo dạng x.y.z, ví dụ 2.6.38, ngoài ra còn số phụ, nhưng chúng ta chỉ nói đến các số chính thống. - x : Chỉ định cho phiên bản chính thống; ví dụ Linux 2, Linux 3; - y : Tình trạng phát hành. Nếu đây là số lẻ, thì đây là development kernel, chỉ dùng cho thử nghiệm. Nếu đây số chẵn, thì đây là stable kernel, có thể dùng được, và các bản phân phối đều dùng stable kernel. - z : Số phụ, là số phát hành, ví dụ 35,36,37... Một vài ví dụ : 2.6.38.8 3.0.0 3.1.2 Recompile kernel 2.6.x Trong tutorial này mình sẽ lấy kernel 2.6.38.8 ra làm ví dụ biên dịch. Dòng kernel 2.6.x và 3.0.x nếu biên dịch thô sẽ có cách biên dịch khá giống nhau. Riêng biên dịch và đóng gói cho Debian sẽ được nói riêng. Đầu tiên download kernel về : Code:
scifi@scifi-945GZ-Micro-775-SE:~$ cd /usr/src scifi@scifi-945GZ-Micro-775-SE:/usr/src$ sudo wget http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2 ![]() Quá trình kéo kernel 2.6.x về sẽ bắt đầu. Sử dụng wget là tốt nhất bởi vì bạn không thể đoạt quyền root bằng cách chỉ trỏ chuột trong trình quản lý cửa sổ, trừ khi chính bạn khởi động nó bằng sudo. Sau khi kéo kernel về, hãy giải nén nó, đối với .tar.gz thì hãy giải nén bằng zxvf còn .tar.bz2 là jxvf. Việc đầu tiên là kiểm tra bộ công cụ yêu cầu của kernel có được thỏa mãn không. Nếu các công cụ trên máy tính của bạn có số phiên bản thấp hơn các công cụ được yêu cầu trong kernel, thì việc biên dịch (sẽ) không thành công do nó yếu (!!). Chi tiết công cụ xem trong Documentations/changes sau khi giải nén kernel. Code:
100%[======================================>] 74,811,146 264K/s in 4m 50s 2011-11-23 15:04:11 (252 KB/s) - `linux-2.6.38.8.tar.bz2' saved [74811146/74811146] Code:
o Gnu C 3.2 # gcc --version o Gnu make 3.80 # make --version o binutils 2.12 # ld -v o util-linux 2.10o # fdformat --version o module-init-tools 0.9.10 # depmod -V o e2fsprogs 1.41.4 # e2fsck -V o jfsutils 1.1.3 # fsck.jfs -V o reiserfsprogs 3.6.3 # reiserfsck -V 2>&1|grep reiserfsprogs o xfsprogs 2.6.0 # xfs_db -V o squashfs-tools 4.0 # mksquashfs -version o btrfs-progs 0.18 # btrfsck o pcmciautils 004 # pccardctl -V o quota-tools 3.09 # quota -V o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version o nfs-utils 1.0.5 # showmount --version o procps 3.2.0 # ps --version o oprofile 0.9 # oprofiled --version o udev 081 # udevinfo -V o grub 0.93 # grub --version o mcelog 0.6 o iptables 1.4.2 # iptables -V " Lý do ? Dùng cấu hình nhân do bản phân phối cung cấp sẽ giảm thiểu tối đa nhân có thể, và nếu bạn config từ đầu thì (có thể) sẽ gặp một vài lỗi không tương thích aka xung đột với bản phân phối/kernel.Sau đó cài đặt đồ nghề ![]() Code:
sudo apt-get install kernel-package build-essentials libncurses5 libncurses5-dev Code:
scifi@scifi-945GZ-Micro-775-SE:/usr/src/linux-2.6.38.8$ cd /boot scifi@scifi-945GZ-Micro-775-SE:/boot$ ls -l total 40084 -rw-r--r-- 1 root root 736150 2011-09-29 03:08 abi-2.6.38-12-generic -rw-r--r-- 1 root root 735445 2011-04-11 16:15 abi-2.6.38-8-generic -rw-r--r-- 1 root root 137332 2011-09-29 03:08 config-2.6.38-12-generic -rw-r--r-- 1 root root 137319 2011-04-11 16:15 config-2.6.38-8-generic drwxr-xr-x 3 root root 12288 2011-11-23 12:45 grub -rw-r--r-- 1 root root 12852285 2011-11-21 15:56 initrd.img-2.6.38-12-generic -rw-r--r-- 1 root root 12817002 2011-11-20 18:17 initrd.img-2.6.38-8-generic -rw-r--r-- 1 root root 160988 2010-10-22 18:43 memtest86+.bin -rw-r--r-- 1 root root 163168 2010-10-22 18:43 memtest86+_multiboot.bin -rw------- 1 root root 2109638 2011-09-29 03:08 System.map-2.6.38-12-generic -rw------- 1 root root 2107662 2011-04-11 16:15 System.map-2.6.38-8-generic -rw------- 1 root root 1217 2011-09-29 03:10 vmcoreinfo-2.6.38-12-generic -rw------- 1 root root 1216 2011-04-11 16:18 vmcoreinfo-2.6.38-8-generic -rw------- 1 root root 4522064 2011-09-29 03:08 vmlinuz-2.6.38-12-generic -rw-r--r-- 1 root root 4521296 2011-04-11 16:15 vmlinuz-2.6.38-8-generic scifi@scifi-945GZ-Micro-775-SE:/boot$ Code:
-rw-r--r-- 1 root root 137332 2011-09-29 03:08 config-2.6.38-12-generic -rw-r--r-- 1 root root 137319 2011-04-11 16:15 config-2.6.38-8-generic Code:
scifi@scifi-945GZ-Micro-775-SE:/boot$ cd /usr/src/linux* scifi@scifi-945GZ-Micro-775-SE:/usr/src/linux-2.6.38.8$ sudo cp -riv /boot/config-2.6.38-8-generic .config `/boot/config-2.6.38-8-generic' -> `.config' scifi@scifi-945GZ-Micro-775-SE:/usr/src/linux-2.6.38.8$ . Chú ý là file config phải cùng phiên bản với kernel dự định recompile. Bây giờ đánh lệnhCode:
sudo make menuconfig Sau khi load, chọn Load An Alternate Configuration File để load .config. Bấm Enter. ![]()
Toàn bộ cách Config (thực ra là rất nhiều, mình chỉ điẻm qua một vài cái chính, những gì đánh dấu mặc định mà tối ưu luôn cũng bỏ qua) : ![]() [SPOIL=" "] General Setup Enable Loadable Module Support Enable the block layer Processor Types And Features ![]() Power Management And ACPI Options Bus Options (PCI etc.) Executable File Formats / Emulations Networking Support Device Drivers Sau khi config xong, bạn chọn Save an Alternate Configuration File... Và lưu với chính file .config lúc nãy. Tiếp theo để biên dịch, bạn đánh lệnh : Code:
scifi@scifi-945GZ-Micro-775-SE:/usr/src/linux-2.6.38.8$ sudo make localmodconfig Code:
sudo make ImageType modules modules_install [b(z)](Image)(Disk)(Lilo) Tức là có các loại : zImage, bzImage, zDisk, bzDisk, zLilo và bzLilo. bzImage là loại phổ biến nhất nên ta sẽ chọn nó. bz chỉ định loại nén, còn Image chỉ định loại nhân. Thực ra bạn có thể đánh từng lệnh một Code:
sudo make ImageType sudo make modules sudo make modules_install Code:
sudo make modules sudo make modules_install Code:
sudo make install ![]() ![]() ![]() Quá trình recompile/tối ưu hóa nhân Linux 2.6.38.8 đến đây là kết thúc. Recompile kernel với kernel 3.0.x Đầu tiên cũng dùng wget để lấy kernel : Code:
wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.0.9.tar.gz Recompile kernel cho nhánh Debian, kernel 3.0.x Sẽ compile kernel 3.0.x cho nhánh Debian, đóng gói và cài trên bất cứ máy nào, tất nhiên là gói nền tảng nào hỗ trợ máy cài ấy (vì i386 không dùng được với IA64, of course). Ưu điểm của cách này là :
Code:
sudo apt-get install kernel-package build-essentials libncurses5 libncurses5-dev Code:
wget http://kernel.org/pub/linux/kernel/v3.x/linux-3.0.8.tar.gz ![]() Sau đó copy file cấu hình từ /boot qua để cấu hình tiếp Code:
cp -riv /boot/config-3* .config Code:
cp -riv /boot/config-$(uname -r) .config Code:
make menuconfig make localmodconfig Code:
make-kpkg clean Code:
sudo fakeroot make-kpkg --initrd --append-to-version=LABEL kernel-image kernel-headers *LABEL : Nhãn. Sẽ đi kèm theo tên nhân, ví dụ "Ubuntu, with Linux kernel 3.0.8-11LABEL". Label không được chứa dấu "-","." (chán nhỉ, toàn dấu ưa thích của mềnh ) chỉ được dùng dấu "+","-" và các kí tự viết thường.Quá trình này cũng khá lâu (nhưng không lâu bằng compile kernel thô). Sau đó sẽ có hai file deb, dùng sudo dpkg -i *.deb để cài nó. Reboot lại với kernel mới. ![]() Kết thúc ![]() Một vài lời kết : * Compile Kernel rắc rối ở chỗ, phải cấu hình theo ý mình. Các tùy chọn đi kèm theo Help có hướng dẫn khá mơ hồ (nhưng nhiều khi lại hữu ích) nhưng số lượng các cấu hình rất lớn và bạn sẽ (có thể sẽ) chọn nhầm các tùy chọn làm nặng thêm kernel, phá hỏng kernel, config không đúng,... * Đới với vá lỗi kernel mà không tối ưu, bạn chỉ cần compile kernel mà không cần đụng tới .config. * Sau khi cài kernel mới thì bạn phải cài lại display driver vì sau khi nạp kernel mới thì display driver initialization sẽ bị fail. ![]() Good luck!!! (Mọi câu hỏi hãy VM profile mình vì mình sẽ không rảnh thường xuyên để check topic).
|
![]() |
| Bookmarks & Social Networks |
|
|
| Ðiều Chỉnh | |
| Xếp Bài | |
|
|
|