Trung tâm đào tạo thiết kế vi mạch Semicon


  • ĐĂNG KÝ TÀI KHOẢN ĐỂ TRUY CẬP NHIỀU TÀI LIỆU HƠN!
  • Đăng ký
    *
    *
    *
    *
    *
    Fields marked with an asterisk (*) are required.
wafer.jpg

[Học BBB] Build System Embedded Linux For BeagleBone Black

Email In PDF.

Trong phần hướng dẫn này sẽ hướng dẫn cách xậy dựng một hệ thống nhúng Linux trên một Kit được sử dụng phổ biến hiện nay là BeagleBone Black.

Các công việc cần thực hiện:

- Cài đặt toolchain để build các thành phần của embedded Linux.

- Build bootloader, cách định dạng thẻ nhớ để write bootloader.

- Build kernel.

- Build root filesystem.

- Tiến hành test.

Embedded Linux gồm 4 thành phần chính là:

- Toolchain: gồm một số công cụ để tạo ra code cho board.

- Bootloader: Khởi tạo hệ thống và load kernel vào bộ nhớ.

- Kernel: quản lý tài nguyên và tương tác với hardware.

- Root filesystem: chứa thư viện và các chương trình khởi chạy khi kernel hoàn thành việc khởi tạo.

1. Install toolchain

Toolchain có rất nhiều loại và chúng có ưu nhược điểm khác nhau. Chẳng hạn như các toolchain build sẵn thì chúng ta sẽ cài đặt và sử dụng chúng một cách nhanh chóng nhưng lại giới hạn trong việc tùy chỉnh cấu hình. Còn toolchain mà cần phải build mới sử dụng được thì sẽ mất thời gian và đòi hỏi có kiến thức để build nhưng chúng ta có thể dễ dàng tùy chỉnh cấu hình, ví dụ như crosstool-NG.

Để hướng dẫn nhanh chóng, bài này sẽ sử dụng toolchain build sẵn.

Để cài đặt toolchain:

$ sudo apt install gcc-arm-linux-gnueabihf

Câu lệnh trên sẽ cài đặt toolchain để chúng ta có thể build các thành phần khác. Các lệnh của toolchain này nằm trong thư mục /usr/bin (điều này sẽ cần thiết cho việc build root filesystem).

Tạo alias thuận tiện cho việc build. Chúng ta sẽ thường lặp lại việc gõ lệnh này, nên việc tạo alias là một cách để giúp chúng ta tối ưu hóa công việc hơn.

$ alias armmake='make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- '

-j4: chỉ ra số lõi sử dụng cho việc build.

ARCH=arm: chỉ định kiến trúc build là arm.

CROSS_COMPILE=arm-linux-gnueabihf-: prefix toolchain

Nếu không thực hiện được lệnh này bạn cần phải cài đặt toolchain trước bằng lệnh:

$ sudo apt install gcc-arm-linux-gnueabihf

và xem số core cpu của máy bằng lệnh:

$ lscpu

thay vào chỗ -j4 bằng số core của máy.

Chú ý khoảng trắng giữa các lệnh nữa

Kết thúc phần cài đặt toolchain.

2. Build bootloader

Bootloader là thành phần thứ hai của embedded Linux. Nó có nhiệm vụ khởi tạo hệ thống và loader kernel vào bộ nhớ. Cũng như toolchain, bootloader có rất nhiều loại phù hợp cho từng loại kiến trúc khác nhau. Trong phần hướng dẫn này sẽ sử dụng U-Boot cho kit BeagleBone Black.

Trở về thư mục home của user:

$ cd

Tiến hành get resource u-boot về:

$ git clone git://git.denx.de/u-boot.git

Việc get này nhanh hay chậm tùy vào tốc độ đường truyền internet.

Sau khi đã get xong, home directory sẽ có một thư mục mang tên u-boot.

$ cd u-boot

$ armmake distclean

Câu lệnh trên để clean các kết quả và cấu hình của lần build trước. Chúng ta tiến hành cấu hình u-boot cho boar:

$ armmake am335x_evm_defconfig

Tiến hành build bootloader:

$ armmake

Sau khi build xong chúng ta sẽ được file MLO và u-boot.img.

Test u-boot trên board BBB.

Trước tiên chúng ta cần write u-boot xuống SD card. Chúng ta cần định dạng SD card để thực hiện việc test.

Trong bài hướng dẫn này sử dụng Adapter microSD (loại khay nhỏ cắm trực tiếp vào máy tính). Kiểm tra thẻ nhớ đã được mount hay chưa?

$ lsblk

Nếu kết quả có chứa mmcblk0 thì thẻ nhớ đã được mount thành công. Tiến hành phân vùng thẻ nhớ.

Chúng ta sẽ sử dụng một script trong sách để định dạng thẻ nhớ.

Get script này về máy:

$ git clone https://github.com/PacktPublishing/Mastering-Embedded-Linux-Programming-Second-Edition.git

Chúng ta sẽ được file có tên “Mastering-Embedded-Linux-Programming-Second-Edition”.

Thay đổi file mode cho script:

$ sudo chmod 755 ./Mastering-Embedded-Linux-Programming-Second-Edition/format-sdcard.sh

Tiến hành format với lệnh:

$ ./Mastering-Embedded-Linux-Programming-Second-Edition/format-sdcard.sh mmcblk0

Rút thẻ nhớ và cắm vào lại để sử dụng. Tiếp theo là copy các file vào phân vùng boot.

$ cp MLO u-boot.img /media/user_name/boot

Chuẩn bị boot:

Board BBB chưa cấp điện, lắp thẻ nhớ vào và kết nối cổng terminal trên BBB vào thiết bị UART-to-COM được cắm vào máy tính. Sử dụng terminal console để tương tác, ở đây sử dụng picocom.

$ sudo picocom -b 115200 /dev/ttyUSB0

Nhấn giữ nút boot và cấp nguồn cho board, lúc này trên console sẽ hiện các message, khi có thông báo nhấn SPACE để hủy việc boot tự động ta nhấn SPACE. Lúc này chúng ta có thể tương tác với u-boot. Như vậy là u-boot đã được build thành công.

3. Build kernel

Kernel là thành phần tiếp theo mà chúng ta sẽ làm việc. Để có thể build kernel, trước tiên chúng ta cần get resouce về máy:

$ cd

$ git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git

$ cd linux-stable

Xem danh sách version kernel:

$ git branch -a

Chọn version kernel để build:

$ git checkout linux-4.9.y

Bắt đàu quá trình build

$ armmake distclean

$ armmake multi_v7_defconfig

$ armmake

Thời gian build nhanh hay lâu tùy thuộc vào cấu hình máy. Sau khi build ta sẽ được file kết quả trong arch/arm/boot/zImage và arch/arm/boot/dts/am335x-boneblack.dtb

Copy các file này vào phân vùng boot trên thẻ nhớ

$ cd

$ cd linux-statble

$ cp arch/arm/boot/zImage arch/arm/boot/am335x-boneblack.dtb /media/user/boot

Test kernel thồi:

Làm tương tự với u-boot, đến khi nhấn SPACE.

=> mmc rescan

=> fatload mmc 0:1 ${loadaddr} zImage

=> fatload mmc 0:1 ${fdtaddr} am335x-boneblack.dtb

=> setenv bootargs console=ttyO0

=> bootz ${loadaddr} – ${fdtaddr}

Nếu board có thể load được kernel thì chúng ta đã build kernel thành công. Sau đó, trên console sẽ báo kernel panic. Lỗi này do chúng ta chưa có root filesystem.

4. Build root filesystem

Bước gần như cuối cùng để trong việc build. Chúng ta tiến hành get root filesystem về máy.

$ cd

$ git clone git://git.buildroot.net/buildroot

$ cd buildroot

Cấu hình buildroot để build root filesystem cho BBB:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- beaglebone_defconfig

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

Sau câu lệnh trên, một cửa sổ cấu hình sẽ hiện ra. Lần lượt, chúng ta cấu hình như sau (nhấn SPACE bỏ chọn, nhấn y để chọn):

Uncheck kernel

Uncheck bootloader

Target option:

Floating point strategy (NEON)

ARM instruction set (Thumb2)

Target packages:

Networking application:

[*] dhcpcd

[*] openssh

Exit và save cấu hình lại.

Tiến hành build với lệnh:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Việc build sẽ khá mất thời gian. Sau khi build xong, chúng ta sẽ có được file rootfs.ext4

Tiến hành write nó xuống thẻ nhớ:

$ sudo dd if=output/images/rootfs.ext4 of=/dev/mmcblk0p2

Bây giờ, chúng ta sẽ cùng test thành quả.

Chúng ta cũng tiến hành boot như với u-boot đến đoạn nhấn SPACE.

Việc boot này theo các thủ công, sau khi đã chắc chắn chúng ta sẽ tạo một file để board tự boot.

=> mmc rescan

=> fatload mmc 0:1 ${loadaddr} zImage

=> fatload mmc 0:1 ${fdtaddr} am335x-boneblack.dtb

=> setenv bootargs console=${console} {optargs} root=/dev/mmcblk0p2 rootfstype=ext4

=> bootz ${loadaddr} – ${fdtaddr}

Nếu một việc suông sẽ, console sẽ xuất hiện thông báo login. Chúng ta sẽ login vào với id là “root” mà không cần mật khẩu, chúng ta có thể đổi mật khẩu sau.

Nếu muốn board tự boot, chúng ta sẽ tạo ra ra một file có tên là uEnv.txt chứa nội dung của các bước boot thủ công, nội dung file như sau:

Như vậy là chúng ta đã xây dựng thành công hệ thống embedded Linux cơ bản trên board BBB.

Nguồn: anhgiau.wordpress

Bạn Có Đam Mê Với Vi Mạch hay Nhúng      -     Bạn Muốn Trau Dồi Thêm Kĩ Năng

Mong Muốn Có Thêm Cơ Hội Trong Công Việc

    Và Trở Thành Một Người Có Giá Trị Hơn

Bạn Chưa Biết Phương Thức Nào Nhanh Chóng Để Đạt Được Chúng

Hãy Để Chúng Tôi Hỗ Trợ Cho Bạn. SEMICON  

 

Hotline: 0972.800.931 - 0938.838.404 (Mr Long)

 

 

Lần cập nhật cuối ( Thứ tư, 21 Tháng 8 2019 20:08 )  

Related Articles

Chat Zalo