2012-07-13 14 views
9

Tôi đang phát triển các mô-đun hạt nhân ngay bây giờ và thời gian xây dựng bắt đầu nhận được dưới da của tôi. Là một tác dụng phụ tôi đang dùng quá nhiều "cà phê" phá vỡ trong quá trình xây dựng.Cố gắng tìm tất cả các mô-đun hạt nhân cần thiết cho máy của tôi bằng cách sử dụng shell script

Vì vậy, tôi đang tìm cách xây dựng chỉ những thứ tôi cần cho nền tảng của mình. Chương 7 và 8 của "hạt nhân Linux trong một nutshell" đã cho một chi tiết tốt về cách làm điều đó bằng tay. Đó là một đọc tốt: http://www.kroah.com/lkn/

Nhưng mặc dù tôi hiểu các chất liệu, điều này vẫn còn rất nhiều tinh chỉnh để thực hiện công việc đó.

2.6.32 và các hạt nhân sau này đã thêm mục tiêu mới make localmodconfig. quét qua lsmod và thay đổi .config một cách thích hợp. Vì vậy, tôi nghĩ rằng tôi tìm thấy "tự động hóa" của tôi. Nhưng kịch bản perl này cũng có một số vấn đề.

chủ đề này mô tả các vấn đề: https://bbs.archlinux.org/viewtopic.php?pid=845113

Ngoài ra còn là một giải pháp đề xuất mà dường như làm việc cho người khác, là để chạy các kịch bản trực tiếp thay vì sử dụng mục tiêu làm của.

Mặc dù đối với tôi, làm cho localmodconfig không hoạt động chút nào. của nó vì những điều sau đây:

make clean 
make mrproper 
cp /boo/config-'uname -r' .config 
make localmodconfig 

và nó tạm dừng với

vboxguest config not found!! 
nf_defrag_ipv6 config not found!! 
vboxsf config not found!! 
vboxvideo config not found!! 

Vấn đề là môi trường phát triển hạt nhân của tôi là bên trong VirtualBox. Các mô đun vbox này đã được cài đặt khi tôi chọn cài đặt "phụ đề khách ảo".

Và mô đun netfilter có thể là mô-đun phân bổ cụ thể (Rất nhiều mô-đun netfilter không phải là một phần của hạt nhân đường chính, vì vậy nó không gây sốc cho tôi), không được bao gồm trong hạt nhân đường chính.

Bây giờ giải pháp thay thế này rõ ràng là dỡ các mô-đun này và thử lại. Nhưng tôi đang nghĩ nếu có bản vá cho streamline_config.pl sẽ cho phép người dùng loại trừ các mô-đun nhất định nếu họ muốn. Vấn đề là tôi có không kiến ​​thức về perl và tôi thích nó theo cách đó.

Vì vậy, vấn đề của tôi trong Tóm

  1. Patching streamline_config.pl vì vậy tôi có thể cung cấp một danh sách các tên mô-đun như là đối số mà nó sẽ loại trừ khỏi chế biến các tập tin cấu hình.

    Kịch bản tọa lạc tại kernel.org

  2. EDIT: Removed những thứ về perl script không chạy. Như mugen kenichi chỉ ra (Tôi câm thế nào?). Nhưng vẫn làm cho localmodconfig không hoạt động do không có một số mã mô-đun dưới gốc cây. vá streamline_config.pl vẫn còn yêu cầu hợp lệ.

+2

Bạn có thể không chạy một tập lệnh Perl với 'sh'. Hãy thử 'perl' và bạn sẽ không nhận được những lỗi' my: command not found' và lỗi perl hoặc cảnh báo thay thế. –

+0

Có vẻ như tôi là người ngốc nghếch nhất trên thế giới. Làm thế nào tôi có thể làm điều đó :) – Aftnix

+0

Liệu kịch bản thực sự thất bại? Từ mã có vẻ như nó chỉ in lỗi nhưng không thất bại nếu mã của một mô-đun không có trong cây. Xem [dòng 375] (http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=scripts/kconfig/streamline_config.pl;h=bccf07ddd0b67a0e2f761fd5721f274a49bf9bbb ; hb = HEAD # l375) –

Trả lời

8

Bất cứ ai khác cố gắng xây dựng một hình ảnh hạt nhân tối thiểu cũng đang tìm kiếm cách giảm thời gian xây dựng, nên làm như sau:

1) sao chép phân phối kernel config trong cây nguồn của bạn.Nó có thể được thực hiện với một trong hai lệnh đưa ra dưới đây:

$zcat /proc/config.gz > .config 

hoặc

$cp /boot/config-'uname -r' .config 

2) Sử dụng localmodconfig mục tiêu.

$make localmodconfig 

Nó sẽ sử dụng lsmod để tìm mô-đun nào được tải tại thời điểm này. Sau đó, nó sẽ tìm kiếm thông qua .config của phân phối để kích hoạt chúng và vô hiệu hóa những người khác.

Điều quan trọng cần biết là nó không phải lúc nào cũng hoạt động hoàn hảo. Vì vậy, bạn nên tinh chỉnh cấu hình của mình hơn nữa bằng cách sử dụng make menuconfig. Bạn sẽ thấy một số mô-đun vẫn được đánh dấu để được xây dựng mà là trong thực tế không cần thiết cho hệ thống của bạn.

Đôi khi ra khỏi mô-đun cây có thể khiến cho localmodconfig bị lỗi. Nếu đó là trường hợp bạn có thể giải quyết vấn đề đó theo hai cách:

a) dỡ bỏ mô-đun cây ra và thử lại make localmodconfig. b) Chạy kịch bản perl trực tiếp:

$chmod +x script/kconfig/streamline_config.pl 
$perl script/kconfig/streamline_config.pl > .config 

3) Cài đặt ccache [1]. Nó sẽ cải thiện đáng kể thời gian xây dựng của bạn. Nó lưu trữ các đối tượng. Vì vậy, nó sẽ giảm các bản xây dựng tiếp theo.

Có thể là ccache được đưa vào kho của phân phối để bạn có thể cài đặt nó qua apt-get hoặc yum. Trong CentOS có sẵn trong repo EPEL. [2]

4) Cho càng nhiều lõi càng tốt cho công việc xây dựng

$make -j8 CC="ccache gcc" 

kết quả của tôi là:

real 3m10.871s 
user 4m36.949s 
sys 1m52.656s 

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL

+1

bạn vừa mới tiết kiệm cho tôi số giờ đi qua cấu hình (với con tôi can thiệp vào việc gõ của tôi ☺) .Với lời khuyên của bạn, tôi có thể chuyển đổi biên dịch trong tất cả các mô-đun hoạt động với một tập lệnh sed đơn giản.Cảm ơn bạn 'cp .config .config- cũ, làm cho localmodconfig, cho tôi trong $ (grep = m .config | xargs); làm sed "s/$ i/$ (echo $ i | sed s/= m/= y /) /" -i .config- cũ; cp .config-old .config; done' –

+1

Rất vui được biết rằng điều này đã giúp bạn. – Aftnix

+0

không phải là tập lệnh streamline_config.pl trong 'tập lệnh' chứ không phải 'tập lệnh'? –

Các vấn đề liên quan