tập tin kernel.img
Khi sử dụng kernel Linux, kernel.img
tập tin chỉ được đổi tên linux/arch/arm/boot/Image
. Cũng có thể (hoặc ít nhất là có thể lần trước tôi đã kiểm tra) để sử dụng phiên bản nén của tệp này - zImage
. Nó có thể chứa tích hợp initramfs
(ramdisk) nhưng không bắt buộc. Ví dụ, kernel.img
tập tin chứng khoán không chứa initramfs
while kernel_emergency.img
.
Lưu ý: Hướng dẫn biên dịch kernel chính thức trên wiki eLinux đề nghị bạn nên sử dụng imagetool-uncompressed.py
công cụ để chuẩn bị kernel.img
tệp. Nó là cần thiết trong những ngày đầu của RaspberyPi nhưng ngày nay bootloader có thể xử lý các tệp Image
và zImage
tệp thông thường .
Vấn đề nguồn hạt nhân
Điều rất quan trọng là khi xây dựng kernel cho RaspberryPi, bạn không thể sử dụng bất kỳ phiên bản nào của nó. Chỉ phiên bản đặc biệt được chuyển đến RaspberryPi mới hoạt động. Thật không may, phiên bản ngược dòng hiện tại (tìm thấy trên kernel.org
trang web) không tương thích với RaspberryPi. Ngoài ra, versatil_config
không tốt cho RaspberryPi, bạn nên sử dụng bcmrpi_defconfig
thay thế (tìm thấy trên các nguồn nhân tương thích RaspberryPi) hoặc bcmrpi_emergency_defconfig
nếu kế hoạch của bạn về việc sử dụng buildin initramfs
.
Hướng dẫn xây dựng hạt nhân
Nơi tốt nhất để lấy các nguồn kernel cho RaspberryPi là trên nền tảng github . Bạn cũng có thể tìm thấy một số giải thích hữu ích về cách lấy nó và cách biên dịch nó trên wiki RasbperryPi chính thức . Đây là phiên bản đơn giản hóa nhỏ của tôi về các bước liên quan (LƯU Ý: Tôi giả sử bạn muốn biên dịch lại kernel. Nó nhanh hơn nhiều và sẽ tạo ra kết quả tương tự nhưng cũng có thể xây dựng kernel trên RaspberryPi):
Tải về toolchain chính thức trên tạo của riêng bạn. Theo cách khác, tôi cho rằng nó đã được cài đặt /usr/bin/arm-linux-gnueabi-*
. Nếu bạn có nó ở nơi khác, bạn nên thay đổi CROSS_COMPILE
tùy chọn trong tất cả các make
lệnh của bạn .
Tới https://github.com/raspberrypi/linux trang web nơi bạn có thể tìm thấy nguồn RapsberryPi hạt nhân chính thức. Bạn có thể tải mã theo hai cách:
- Là một tệp nén (để sử dụng tùy chọn này, bạn không phải cài đặt
git
tiện ích và bạn có thể thực hiện việc này ngay cả trên chính RapsberryPi): Nhấp vào ZIP
biểu tượng, một Code
tab bên dưới ở đầu trang. Điều này sẽ cho phép bạn tải xuống các tập tin nguồn như zip
tập tin. Bạn có thể sử dụng git để làm điều này thay vào đó nhưng điều đó (như được mô tả trên wiki) sẽ cần nhiều không gian và thời gian hơn. Sau đó giải nén tệp để lấy cây nguồn.
Sử dụng git
tiện ích (điều này không hiệu quả với tôi trên RaspberryPi vì có thể có một lượng RAM nhỏ nhưng có thể hoạt động tốt trên các hệ thống máy tính để bàn ( --depth 1
đối số lưu ý ngăn git tải xuống toàn bộ lịch sử phát triển (rất lớn):
git clone --depth 1 git://github.com/raspberrypi/linux.git
Sử dụng cấu hình mặc định được cung cấp bởi nền tảng:
cp arch/arm/configs/bcmrpi_defconfig .config
Chạy make oldconfig
và trả lời một số câu hỏi (nên nhấn enter trong mỗi câu hỏi để lại câu trả lời mặc định):
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- oldconfig
Biên dịch kernel:
make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi-
Sao chép các mô-đun hạt nhân vào /tmp/modules
:
make ARCH=arm modules_install INSTALL_MOD_PATH=/tmp/modules
Sử dụng Image
tập tin nhưkernel.img
Tải lên tất cả các mô-đun từ /tmp/modules/lib/modules/
trong máy tính của bạn vào /lib/modules/
thư mục trên rootfs RaspberryPi của bạn.
Thêm initramfs
Điều này không cung cấp hướng dẫn về cách tạo initramfs
, tuy nhiên. Vì đây là chủ đề rất rộng (về cơ bản, bạn phải tạo ra môi trường không gian người dùng Linux đang hoạt động, thực sự không có giới hạn nào về mức độ phức tạp của nó), bây giờ tôi sẽ không đề cập đến vấn đề này. Tôi sẽ chỉ lưu ý rằng initramfs
có thể được sử dụng ở hai dạng khác nhau - dạng độc lập, trong đó tệp riêng biệt và bản dựng trong đó được tích hợp với tệp hình ảnh hạt nhân (giống như trong kernel_emergency.img
). Tùy chọn thứ hai nên được hỗ trợ bởi bộ tải khởi động RaspberryPi nhưng có một số tin đồn rằng nó đã bị hỏng trên phiên bản phần sụn hiện tại nên có lẽ bạn nên sử dụng phiên bản dựng.
Cách tốt nhất để bắt đầu là sử dụng nội dung initramfs đang hoạt động (đang được sử dụng cho kernel_emergency.img) bằng cách tải xuống từ kho lưu trữ github nền tảng khác và chỉ sau khi bạn có thể khởi động kernel bằng iniramfs
hình ảnh này , hãy thử tự xây dựng. Tất cả những gì cần thiết cho việc này là trỏ đến CONFIG_INITRAMFS_SOURCE
tùy chọn cấu hình kernel của thư mục đã tải xuống .
Ghi chú cuối cùng
Vì vậy, bạn nên làm điều này trong 3 bước:
- Hãy thử xây dựng và khởi động kernel mà không cần
initramfs
tập tin.
- Hãy thử thêm
initramfs
nội dung sẵn sàng vào kernel của bạn.
- Thay đổi
initramfs
nội dung này cho phù hợp với nhu cầu của bạn.