Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Giới thiệu

Trong loạt bài viết này, tôi muốn xem xét hệ thống xây dựng phân phối buildroot và chia sẻ kinh nghiệm của tôi trong việc tùy chỉnh nó. Tại đây, bạn sẽ có trải nghiệm thực tế trong việc tạo một hệ điều hành nhỏ với giao diện đồ họa và chức năng tối thiểu.

Trước hết, bạn không nên nhầm lẫn giữa hệ thống xây dựng và bản phân phối. Buildroot có thể xây dựng một hệ thống từ một tập hợp các gói được cung cấp cho nó. Buildroot được xây dựng trên các tệp tạo tệp và do đó có khả năng tùy biến rất lớn. Thay thế gói bằng phiên bản khác, thêm gói của riêng bạn, thay đổi quy tắc xây dựng gói, tùy chỉnh hệ thống tệp sau khi cài đặt tất cả các gói? buildroot có thể làm tất cả điều này.

Ở Nga, buildroot được sử dụng, nhưng theo tôi có rất ít thông tin tiếng Nga dành cho người mới bắt đầu.

Mục tiêu của công việc là lắp ráp một bộ phân phối với khả năng tải xuống trực tiếp, giao diện và trình duyệt Icewm. Nền tảng mục tiêu là hộp ảo.

Tại sao xây dựng phân phối của riêng bạn? Thường cần có chức năng hạn chế với nguồn lực hạn chế. Thậm chí thường xuyên hơn trong tự động hóa, bạn cần tạo phần sụn. Việc điều chỉnh một bản phân phối có mục đích chung bằng cách loại bỏ các gói không cần thiết và biến nó thành phần sụn sẽ tốn nhiều công sức hơn so với việc xây dựng một bản phân phối mới. Sử dụng Gentoo cũng có những hạn chế.

Hệ thống Buildroot rất mạnh mẽ nhưng nó sẽ không giúp được gì cho bạn. Nó chỉ có thể kích hoạt và tự động hóa quá trình lắp ráp.

Các hệ thống xây dựng thay thế (yocto, hệ thống xây dựng mở và các hệ thống khác) không được xem xét hoặc so sánh.

Lấy nó ở đâu và bắt đầu như thế nào

Trang web dự án - buildroot.org. Tại đây bạn có thể tải xuống phiên bản hiện tại và đọc hướng dẫn. Ở đó bạn có thể liên hệ với cộng đồng, có trình theo dõi lỗi, danh sách thư và kênh irc.

Buildroot vận hành các cấu hình defconfig cho bảng mục tiêu của bản dựng. Defconfig là tệp cấu hình chỉ lưu trữ các tùy chọn không có giá trị mặc định. Chính anh ta là người quyết định những gì sẽ được thu thập và làm thế nào. Trong trường hợp này, bạn có thể định cấu hình riêng các cấu hình của bộ tải khởi động busybox, linux-kernel, uglibc, u-boot và barebox, nhưng tất cả chúng sẽ được gắn với bảng mục tiêu.
Sau khi giải nén kho lưu trữ đã tải xuống hoặc sao chép từ git, chúng ta sẽ có được một buildroot sẵn sàng sử dụng. Bạn có thể đọc thêm về cấu trúc thư mục trong hướng dẫn sử dụng; tôi sẽ cho bạn biết về những điều quan trọng nhất:

bảng - một thư mục chứa các tập tin cụ thể cho từng bảng. Đây có thể là các tập lệnh để tạo hình ảnh hệ thống (iso, sdcart, cpio và các tập lệnh khác), thư mục lớp phủ, cấu hình kernel, v.v.
cấu hình - cấu hình thực tế của bảng. Defconfig là một cấu hình bảng chưa hoàn thiện. Nó chỉ lưu trữ các tham số khác với cài đặt mặc định
dl - thư mục chứa mã nguồn/tệp đã tải xuống để lắp ráp
đầu ra/mục tiêu — hệ thống tập tin đã được lắp ráp của hệ điều hành thu được. Sau đó, hình ảnh được tạo từ nó để tải xuống/cài đặt
đầu ra/máy chủ - Tiện ích máy chủ để lắp ráp
đầu ra/xây dựng - gói lắp ráp

Việc lắp ráp được cấu hình thông qua KConfig. Hệ thống tương tự được sử dụng để xây dựng nhân Linux. Danh sách các lệnh được sử dụng phổ biến nhất (thực thi trong thư mục buildroot):

  • tạo menuconfig - gọi cấu hình bản dựng. Bạn cũng có thể sử dụng giao diện đồ họa (tạo nconfig, tạo xconfig, tạo gconfig)
  • tạo linux-menuconfig - gọi cấu hình kernel.
  • làm sạch - làm sạch kết quả xây dựng (mọi thứ được lưu trữ trong đầu ra)
  • thực hiện - xây dựng hệ thống. Điều này không tập hợp lại các quy trình đã được lắp ráp.
  • tạo defconfig_name - chuyển cấu hình sang một defconfig cụ thể
  • tạo list-defconfigs - hiển thị danh sách các defconfigs
  • tạo nguồn - chỉ cần tải xuống các tập tin cài đặt mà không cần xây dựng.
  • giúp đỡ - liệt kê các lệnh có thể

Ghi chú quan trọng và lời khuyên hữu ích

Buildroot không xây dựng lại các gói đã được xây dựng! Vì vậy, có thể xảy ra trường hợp cần phải lắp ráp lại hoàn chỉnh.

Bạn có thể xây dựng lại một gói riêng bằng lệnh tạo tên gói-xây dựng lại. Ví dụ: bạn có thể xây dựng lại nhân Linux:

make linux-rebuild

Buildroot lưu trữ trạng thái của bất kỳ gói nào bằng cách tạo các tệp .stamp trong thư mục đầu ra/build/$packagename:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Do đó, bạn có thể xây dựng lại root-fs và hình ảnh mà không cần xây dựng lại các gói:

rm output/build/host-gcc-final-*/.stamp_host_installed;rm -rf output/target;find output/ -name ".stamp_target_installed" |xargs rm -rf ; make

Biến hữu ích

buildroot có một bộ biến để cấu hình dễ dàng

  • $TOPDIR - thư mục buildroot
  • $BASEDIR - thư mục OUTPUT
  • $HOST_DIR, $STAGING_DIR, $TARGET_DIR — fs lưu trữ, fs dàn dựng, thư mục xây dựng fs đích.
  • $BUILD_DIR - thư mục chứa các gói đã được giải nén và xây dựng

Hình dung

buildroot có tính năng trực quan hóa. Bạn có thể xây dựng sơ đồ phụ thuộc, biểu đồ thời gian xây dựng và biểu đồ kích thước gói trong hệ thống cuối cùng. Kết quả ở dạng tệp pdf (bạn có thể chọn từ svn,png) trong thư mục đầu ra/biểu đồ.

Ví dụ về các lệnh trực quan:

  • make graph-depends xây dựng cây phụ thuộc
  • make <pkg>-graph-depends xây dựng cây phụ thuộc cho một gói cụ thể
  • BR2_GRAPH_OUT=png make graph-build thời gian xây dựng cốt truyện với đầu ra PNG
  • make graph-size vẽ kích thước gói tin

Tập lệnh hữu ích

Có một thư mục con trong thư mục buildroot utils với các kịch bản hữu ích. Ví dụ: có một tập lệnh kiểm tra tính chính xác của mô tả gói. Điều này có thể hữu ích khi thêm các gói của riêng bạn (tôi sẽ thực hiện việc này sau). Tệp utils/readme.txt chứa mô tả về các tập lệnh này.

Hãy xây dựng hệ thống phân phối chứng khoán

Điều quan trọng cần nhớ là tất cả các hoạt động được thực hiện thay mặt cho người dùng thông thường chứ không phải root.
Tất cả các lệnh được thực thi trong buildroot. Gói buildroot đã bao gồm một bộ cấu hình cho nhiều bo mạch thông thường và ảo hóa.

Chúng ta hãy xem danh sách các cấu hình:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Chuyển sang cấu hình qemu_x86_64_defconfig

make qemu_x86_64_defconfig

Và chúng tôi bắt đầu lắp ráp

make

Quá trình xây dựng hoàn tất thành công, hãy xem kết quả:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Buildroot đã biên soạn các hình ảnh mà bạn có thể chạy trong Qemu và xác minh rằng chúng hoạt động.

qemu-system-x86_64 -kernel output/images/bzImage -hda    output/images/rootfs.ext2 -append "root=/dev/sda rw" -s -S

Kết quả là một hệ thống chạy trong qemu:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Tạo cấu hình bảng của riêng bạn

Thêm tập tin bảng

Chúng ta hãy xem danh sách các cấu hình:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Trong danh sách chúng ta thấy pc_x86_64_efi_defconfig. Chúng tôi sẽ tạo bảng của riêng mình bằng cách sao chép nó từ cấu hình:

cp configs/pc_x86_64_bios_defconfig configs/my_x86_board_defconfig

Hãy tạo ngay một thư mục bảng để lưu trữ tập lệnh, lớp phủ rootfs và các tệp cần thiết khác:

mkdir board/my_x86_board

Chuyển sang defconfig này:

make my_x86_board_defconfig

Do đó, bây giờ cấu hình bản dựng (được lưu trữ trong .config trong thư mục gốc của buildroot) tương ứng với máy mục tiêu khởi động x86-64 Legacy(bios).

Hãy sao chép cấu hình linux-kernel (hữu ích sau):

cp board/pc/linux.config board/my_x86_board/

Đặt tham số bản dựng qua KConfig

Hãy bắt đầu thiết lập:

make menuconfig 

Cửa sổ KConfig sẽ mở ra. Có thể cấu hình bằng giao diện đồ họa (make nconfig, make xconfig, make gconfig):

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Chúng ta vào phần đầu tiên Target Options. Tại đây bạn có thể chọn kiến ​​trúc mục tiêu mà quá trình xây dựng sẽ được thực hiện.

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Tùy chọn bản dựng - có nhiều cài đặt bản dựng khác nhau ở đây. Bạn có thể chỉ định các thư mục có mã nguồn, số lượng luồng xây dựng, bản sao để tải xuống mã nguồn và các cài đặt khác. Hãy để cài đặt ở chế độ mặc định.

Toolchain – bản thân các công cụ xây dựng được cấu hình ở đây. Đọc thêm về anh ấy.

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Loại chuỗi công cụ – loại chuỗi công cụ được sử dụng. Đây có thể là một chuỗi công cụ được tích hợp trong buildroot hoặc một chuỗi công cụ bên ngoài (bạn có thể chỉ định thư mục chứa chuỗi công cụ đã được tạo sẵn hoặc url để tải xuống). Có các tùy chọn bổ sung cho các kiến ​​trúc khác nhau. Ví dụ: đối với cánh tay, bạn chỉ cần chọn phiên bản Linaro của chuỗi công cụ bên ngoài.

Thư viện C – lựa chọn thư viện C. Hoạt động của toàn bộ hệ thống phụ thuộc vào điều này. Thông thường, glibc được sử dụng, hỗ trợ tất cả các chức năng có thể. Nhưng nó có thể quá lớn đối với một hệ thống nhúng, vì vậy uglibc hoặc musl thường được chọn. Chúng tôi sẽ chọn glibc (điều này sẽ được yêu cầu sau này để sử dụng systemd).

Chuỗi Tiêu đề hạt nhân và Tiêu đề hạt nhân tùy chỉnh - phải khớp với phiên bản hạt nhân sẽ có trong hệ thống được lắp ráp. Đối với các tiêu đề kernel, bạn cũng có thể chỉ định đường dẫn đến kho lưu trữ tarball hoặc git.

PHIÊN BẢN GCC COMPILER – chọn phiên bản trình biên dịch sẽ được sử dụng để xây dựng
Bật hỗ trợ C++ – chọn xây dựng với sự hỗ trợ cho các thư viện C++ trong hệ thống. Điều này sẽ hữu ích cho chúng tôi trong tương lai.

Tùy chọn gcc bổ sung - bạn có thể đặt tùy chọn trình biên dịch bổ sung. Chúng tôi không cần nó bây giờ.

Cấu hình hệ thống cho phép bạn đặt các tham số trong tương lai của hệ thống đã tạo:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Hầu hết các điểm đều rõ ràng từ tiêu đề. Chúng ta hãy chú ý đến những điểm sau:
Đường dẫn đến bảng người dùng - bảng có người dùng sẽ được tạo (https://buildroot.org/downloads/manual/manual.html#makeuser-syntax).

Tệp ví dụ. Người dùng người dùng sẽ được tạo bằng mật khẩu quản trị viên, tự động gid/uid, /bin/sh shell, người dùng nhóm mặc định, root thành viên nhóm, bình luận Foo user

[alexey@alexey-pc buildroot ]$ cat board/my_x86_board/users.txt 
user -1 user -1 =admin /home/user /bin/sh root Foo user

Thư mục lớp phủ hệ thống tập tin gốc - thư mục được phủ lên trên các fs mục tiêu đã được lắp ráp. Thêm tập tin mới và thay thế những tập tin hiện có.

Tập lệnh tùy chỉnh để chạy trước khi tạo hình ảnh hệ thống tệp - Tập lệnh được thực thi ngay trước khi gấp hệ thống tập tin thành hình ảnh. Bây giờ hãy để trống tập lệnh.

Chúng ta hãy đi đến phần Kernel

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Cài đặt hạt nhân được đặt ở đây. Bản thân kernel được cấu hình thông qua make linux-menuconfig.
Bạn có thể đặt phiên bản kernel theo nhiều cách khác nhau: chọn từ những phiên bản được cung cấp, nhập phiên bản theo cách thủ công, chỉ định kho lưu trữ hoặc tarball tạo sẵn.

Cấu hình hạt nhân - đường dẫn đến cấu hình hạt nhân. Bạn có thể chọn cấu hình mặc định cho kiến ​​trúc đã chọn hoặc giải mã từ Linux. Nguồn Linux chứa một tập hợp các cấu hình giải mã cho các hệ thống đích khác nhau. Bạn có thể tìm thấy thứ bạn cần bằng cách nhìn trực tiếp vào các nguồn ở đây. Ví dụ: đối với bảng đen hình xương beagle, bạn có thể chọn cấu hình.

Phần Target packages cho phép bạn chọn những gói nào sẽ được cài đặt trên hệ thống đang được xây dựng. Bây giờ hãy để nó không thay đổi. Chúng tôi sẽ thêm các gói của chúng tôi vào danh sách này sau.
Hình ảnh hệ thống tập tin - danh sách các hình ảnh hệ thống tập tin sẽ được thu thập. Thêm hình ảnh iso

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Bootloader - lựa chọn bootloader để thu thập. Hãy chọn isolinix

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Cấu hình hệ thống

Systemd đang trở thành một trong những trụ cột của Linux, cùng với kernel và glibc. Vì vậy, tôi đã chuyển cài đặt của nó sang một mục riêng.

Được định cấu hình thông qua make menuconfig, sau đó Gói mục tiêu → Công cụ hệ thống → systemd. Tại đây bạn có thể chỉ định dịch vụ systemd nào sẽ được cài đặt và khởi động khi hệ thống khởi động.

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Lưu cấu hình hệ thống

Chúng ta lưu cấu hình này qua KConfig.

Sau đó lưu defconfig của chúng tôi:

make savedefconfig

Cấu hình hạt nhân Linux

Cấu hình nhân Linux được gọi bằng lệnh sau:

make linux-menuconfig

Hãy thêm hỗ trợ cho card màn hình Virtualbox

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Hãy thêm hỗ trợ tích hợp Virtualbox Guest

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Lưu và thoát. QUAN TRỌNG: cấu hình sẽ được lưu trong out/build/linux-$version/config, nhưng không được lưu trong board/my_x86_board/linux.config

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Do đó, bạn cần sao chép thủ công cấu hình vào vị trí lưu trữ:

cp output/build/linux-4.19.25/.config board/my_x86_board/linux.config

Sau đó chúng tôi sẽ tiến hành lắp ráp lại toàn bộ hệ thống. buildroot không xây dựng lại những gì đã được xây dựng, bạn phải chỉ định thủ công các gói để xây dựng lại. Để không lãng phí thời gian và thần kinh, việc xây dựng lại toàn bộ một hệ thống nhỏ sẽ dễ dàng hơn):

make clean;make

Sau khi hoàn tất quá trình xây dựng, hãy khởi chạy VirtualBox (đã thử nghiệm trên phiên bản 5.2 và 6.0) khởi động từ CD.

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Chạy từ iso đã lắp ráp:

Buildroot - phần 1. Thông tin chung, lắp ráp hệ thống tối thiểu, cấu hình qua menu

Danh sách vật liệu được sử dụng

  1. Hướng dẫn buildroot

Nguồn: www.habr.com

Thêm một lời nhận xét