2013-07-26 49 views
7

Tôi sẽ thiết lập môi trường xây dựng để làm cho hệ thống nhúng Linux của riêng tôi cho Ban AT91SAM9X25. Tôi đang sử dụng buildroot để làm điều này. Lệnh make xây dựng tất cả các mục tiêu, đầu tiên nó xây dựng toolchain sau đó gói và sau đó rootfs và hình ảnh của rootfs (tar, cpio ...). Để xây dựng lại rootfs tôi thường sử dụng làm sạch và sau đó thực hiện. Lệnh làm sạch sẽ xóa tất cả và bao gồm cả chuỗi công cụ.làm thế nào để xây dựng lại rootfs trong buildroot

Vì vậy, câu hỏi đầu tiên của tôi là: Có cách nào để làm lại rootfs mà không cần xây dựng chuỗi công cụ không? Mất nhiều thời gian.

Ngoài ra tôi đang xây dựng hạt nhân Linux trong xây dựng. Tôi đã bật BR2_LINUX_KERNEL [= y] trong công cụ xây dựng. Linux được cấu hình để sử dụng hệ thống tập tin RAM ban đầu, do đó, để xây dựng hạt nhân nó yêu cầu hình ảnh của rootfs (mà nên được tạo ra bởi buildroot). Khi tôi chạy làm dưới gốc của buildroot xây dựng thất bại với lỗi Không thể mở 'buildroot-2013.05/output/images/rootfs.cpio'. Bởi vì (nếu tôi hiểu chính xác) trình tự xây dựng là toolchain - pakages - rootfs - linux kernel - hình ảnh của rootfs. Khi nó cố gắng để xây dựng hạt nhân Linux hình ảnh rootfs.cpio không được tạo ra.

Vì vậy, câu hỏi thứ hai là: Làm thế nào để xây dựng Linux trong buildroot nếu tôi muốn sử dụng hệ thống tập tin RAM ban đầu?

Có thể có các giải pháp thay thế hiệu quả hơn so với xây dựng cơ sở?

Xin cảm ơn trước.

Trả lời

13

Các lệnh make xây dựng tất cả các mục tiêu

Bạn không muốn làm điều đó (cho đến khi Buildroot được cấu hình).
Trước tiên, bạn cần định cấu hình Buildroot bằng cách chỉ định bảng mục tiêu.
mỗi sự manual bạn có thể bắt đầu từ đầu, hoặc tạo một tập tin cấu hình Buildroot cho ban AT91SAM9X25 của bạn bắt nguồn từ một bảng tương tự như configs/at91sam9g20dfc_defconfig

Bên cạnh những tập tin cấu hình Buildroot, bạn cũng sẽ cần một hạt nhân tập tin cấu hình Linux (trừ bạn muốn thử cấu hình hạt nhân từ đầu).
Kernel tập tin cấu hình cho ban eval Atmel với một AT91SAM9x5 là at91sam9x5ek_defconfig

Bạn cũng nên đọc phần 3.4.2. Tạo hỗ trợ hội đồng quản trị của riêng bạn

Vì vậy, câu hỏi đầu tiên của tôi là: Có một số cách để làm lại rootfs mà không cần xây dựng toolchain? Mất nhiều thời gian.

Câu trả lời tùy thuộc vào cách bạn xác định "làm lại rootfs". Nếu bạn xóa thư mục output/images/, thì các tệp của rootfs được viết lại.
Nếu bạn xóa các thư mục trong output/build/, thì các gói hoặc hệ thống con đó được biên dịch lại từ nguồn.

Nếu bạn định cấu hình Buildroot để sử dụng chuỗi công cụ của riêng bạn hoặc một chuỗi công cụ bên ngoài, thì make clean sẽ không xóa chúng. Nếu bạn cấu hình Buildroot để cài đặt chuỗi công cụ nó xây dựng bên ngoài thư mục của nó, thì nó có thể để nó một mình trong một make clean.

Tất nhiên Buildroot make đủ thông minh để biết điều gì đã thay đổi kể từ lần xây dựng cuối cùng và những gì phải được biên dịch lại.
Nó sẽ là trường hợp hiếm hoi mà bạn cần phải xóa các thư mục trong output/build/ để buộc biên dịch lại.

Vì vậy, câu hỏi thứ hai là: Làm thế nào để xây dựng linux trong buildroot nếu tôi muốn sử dụng hệ thống tập tin RAM ban đầu?

Bạn cần cấu hình đúng cả Buildroot và hạt nhân Linux.

make menuconfig 
    Filesystem images ---> 
make linux-menuconfig 
    General setup ---> 
make 

Xem thêm thông tin ngắn gọn về việc sử dụng Buildroot cho AT91SAM9x5 là this Linx4SAM page

Có thể là lựa chọn thay thế có hiệu quả hơn buildroot?

Có các công cụ khác như Open Embedded, nhưng mô tả chúng là "hiệu quả hơn" là chủ quan.


PHỤ LỤC

làm thế nào để xây dựng lại rootfs trong buildroot

Buộc rootfs được xây dựng lại (trong trường hợp này một initramfs) xóa ba file ẩn trong đầu ra /build/linux-x.xx.xx thư mục

.stamp_images_installed 
    .stamp_initramfs_rebuilt 
    .stamp_target_installed 
+0

Hãy để tôi thuật lại câu hỏi của mình về việc xây dựng hạt nhân Linux trong buildroot (có thể là tôi đã giải thích chưa đủ rõ ràng). Buildroot làm: 1.Toolchain -> 2.packages -> 3.Linux kernel -> 4.rootfs images. Nhưng, trên bước 3 (Linux kernel) rootfs hình ảnh được yêu cầu, vì linux cấu hình như sử dụng hệ thống tập tin RAM ban đầu, nhưng chúng tôi đã nhận nó chỉ trên bước 4. Đó là vấn đề - tôi thấy thông báo lỗi trên bước 3: không có rootfs.cpio – Yuri

+1

* "linux được định cấu hình khi sử dụng hệ thống tệp RAM ban đầu" * - ** Buildroot có được định cấu hình cho initramfs ** không? Lỗi ở bướC# 3 ngụ ý rằng bạn chưa cấu hình chính xác Buildroot. Những lo ngại của bạn về cách Buildroot xử lý những gì dường như là một vấn đề gà so với trứng được giải quyết trong [mô tả cam kết cho "thêm hỗ trợ cho initramfs"] (http://git.uclibc.org/buildroot/commit/?id=f507921d391bb2578261a9e45c003e72302dc67a) . Về cơ bản Buildroot thực hiện bướC# 3 với tệp * initramfs * trống, và sau đó thực hiện thêm bướC# 5 để tạo hạt nhân với các initramfs thực tế. – sawdust

+0

Câu trả lời của bạn (ví dụ: xóa tệp .stamp_xxx) rất hữu ích để buộc xây dựng lại rootfs. Tuy nhiên, tôi đã thêm những thứ phụ vào rootfs với một lớp phủ. Khi tôi thay đổi cấu hình khác (hơi) khác nhau mà không có lớp phủ rootfs, tệp từ lớp phủ cũ KHÔNG bị xóa khỏi cấu trúc trong "target /" hoặc từ hình ảnh cuối cùng. Tôi đã thử xóa các nội dung của "mục tiêu" nhưng điều này gây ra một lỗi xây dựng (nó không phải là một đầu ra xây dựng đơn giản). Có cách nào để dọn dẹp những thứ đã bị xóa khỏi rootfs mà không làm một cái ô uế đầy đủ/xây dựng lại không? – Jeremy

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