Bootloader: U-Boot là gì?
Là một chương trình nhỏ có chức năng load hệ điều hành vào trong bộ nhớ. Nó chính xác là một bootloader
U-Boot là tên của một loại bootloader:
- Nó là mã nguồn mở
- Được sử dụng rộng rãi trong các hệ thống nhúng nhỏ. Nó hỗ trợ nhiều kiến trúc. vd: 68k, ARM, Blackfin, MicroBlaze, MIPS, Nios, SuperH, PPC, RISC-VBoot process
Bước 1: run code in boot rom
- Khi hệ thống khởi động lần đầu tiên, hoặc reset. Quyền kiểm soát hệ thống sẽ thuộc về reset vector, nó là một đoạn mã assembly được ghi trước bởi nhà sản xuất chip. boot rom --> giống như vùng nhớ flash memory trong STM32F411
- Chức năng chính của FW lưu trong boot rom đấy chính là sao chép nội dung trong file "MLO" hay còn được gọi là Second Program Loader (SPL) - chương trình tải phụ vào IRAM và excute nó.
- Do bộ nhớ của boot rom khá nhỏ nên rom code cũng được giới hạn ở việc khởi tạo một số phần cứng cần thiết cho việc load SPL lên hệ thống như: MMC/eMMC, SDcard, NAND flash. Các phần cứng này được gọi chung là boot device.--> tốm lại:
Khi cấp điện vào PMU -> boot from boot rom (khởi tạo MMC/eMMC, SD card, NAND, Flash... và copy SPL lên RAM để execute) -> run SPL in RAMBước 2: run code in SPL (second program loader)
SPL: Nhiệm vụ chính của nó là tiếp tục setup các thành phần cần thiết như DRAM controler, eMMC vv.. Sau đó load U-boot tới địa chỉ CONFIG_SYS_TEXT_BASE của RAM.
Bước 3: U-Boot chạy
- Sau khi được load vào RAM, u-boot sẽ thực hiện việc relocation. Di dời đến địa chỉ relocaddr của RAM (Thường là địa chỉ cuối của RAM) và nhảy đến mã của u-boot sau khi di dời.
- Lúc này u-boot sẽ kiểm tra xem file uEnv.txt có tồn tại hay không. Nếu có thực hiện load nó vào RAM ở bước tiếp theo.
*** uEnv.txt: là một bootscript:
--> Bước kiểm tra file uEnv.txt là optional, không bất buộc phải có file này.
- u-boot sẽ load kernel, device-tree vào RAM tại các địa chỉ được cấu hình từ trước trong mã nguồn u-boot (lúc build u-boot) hoặc trong file uEnv.txt.
- Tiếp theo u-boot sẽ truyễn các parameter vào cho kernel. và execute kernel.
Build U-boot
Sử dụng source u-boot của TI homepage: click vào đây để download
các package cần thiết cho quá trình build u-boot
sudo apt install bison build-essential flex swig
cần phải chỉ cho máy tính biết cross-compiler nằm ở đâu trong máy tính
export CC=<cross-compiler path>/arm-linux-gnueabi-
Configure and Build
make ARCH=arm CROSS_COMPILE=${CC} distclean
make ARCH=arm CROSS_COMPILE=${CC} am335x_evm_defconfig
make ARCH=arm CROSS_COMPILE=${CC}
Linux kernel
- Sau khi nhận được quyền kiểm soát và các kernel parameters từ u-boot- Kernel sẽ thực hiện mount hệ thống file system (Rootfs) và cho chạy tiến trình Init trên RAM --> Đây là tiến trình được chạy đầu tiên khi hệ thống khởi động thành công và chạy cho tới khi hệ thống kết thúc
- Tiến trình Init sẽ khởi tạo toàn bộ các tiến trình con khác trên user space, các applications tương tác trực tiếp với người dùng --> Lúc này, hệ thống của chúng ta đã hoàn toàn sẵn sàng cho việc sử dụng.
Build kernel
Sử dụng source kernel của TI homepage: click vào đây để download
các package cần dùng:
libgmp3-dev
libmpc-dev
libssl-dev
bc
sử dung auto script:
make ARCH=arm CROSS_COMPILE=${CC}/arm-none-linux-gnueabihf- beaglebone_defconfig
make ARCH=arm CROSS_COMPILE=${CC}/arm-none-linux-gnueabihf- uImage dtbs
make ARCH=arm CROSS_COMPILE=${CC}/arm-none-linux-gnueabihf- uImage-dtb.am335x-boneblack
make ARCH=arm CROSS_COMPILE=${CC}/arm-none-linux-gnueabihf- modules
Các thành phần trong kernel
1. uImage or zImage(tùy kiểu nén): gồm nhân hệ điều hành + các build-in module (các module được khởi chạy cùng lúc kernel)
2. Các module khác. Không được tích hợp vào kernel, chỉ được chạy khi user execute
--> các module thực hiện một chức năng nào đó, hoặc có thể là một driver của một cái peripherial nào đó
BSP là gì
BSP là board support package -
Root File System là gì
Rootfs là hệ thống file, thể hiện trực quan nhất với user. các file bạn thấy và bạn truy cập tới điều nằm trong Rootfs
tham khảo file "Cấu Trúc Thư Mục.docx" để biết cấu trúc hệ thống trong Rootfs
No comments:
Post a Comment