Hệ điều hành Embedded Linux

Một phần của tài liệu Luận văn tốt nghiệp đại học thiết kế ROBOT tự hành với hệ điều hành nhúng LINUX (Trang 38 - 90)

Một hệ điều hành bao gồm 2 phần chính: phần nhân hay lõi của hệ điều hành (Kernel) và phần hệ thống các tập tin và các ứng dụng (File System).

Embedded Linux là một hệ điều hành hoàn chỉnh. Cụm từ “embedded” thường được đề cập trong kernel nhưng thực chất không có một phiên bản Linux kernel nào dành riêng cho hệ thống nhúng. Linux kernel source code được sử dụng chung để compile cho mọi thiết bị, từ các thiết bị nhúng, đến máy PC và cả các server lớn, đối với mỗi platform sẽ có những option hiệu chỉnh phù hợp và đặc biệt dành cho platform đó.

Luận án tốt nghiệp Chương 5: Mạch Micro2440 Các thành phần cấu tạo nên hệ thống Embedded Linux bao gồm boot loader, Linux kernel, và File System. Tất cả các thành phần này đều có thể tìm thấy phiên bản open source và chúng ta có thể tự mình chỉnh sửa, thay đổi cho phù hợp với thiết bị của mình.

Embedded Linux không thể chạy trên các processor có kiến trúc nhỏ hơn 32-bit. Trong thời gian gần đây, công nghệ system-on-chip (SOC) phát triển mạnh, dẫn đến việc hạ giá thành sản xuất các microprocessor, đồng thời bộ nhớ RAM và flash cũng rẻ và có dung lượng lớn hơn tạo nên thuận lợi cho việc chuyển sang phát triển hệ thống nhúng có sử dụng Embedded Linux. Các hệ thống nhúng ngày nay bên cạnh các chức năng cần thiết còn có thể hỗ trợ thêm các chức năng phụ (web server, firewall, nghe nhạc...) thông qua hệ thống Embedded Linux.

Việc sử dụng Embedded Linux cho hệ thống nhúng còn giúp giảm thời gian thiết kế và phát triển, do bản thân Linux kernel được thiết kế theo module. Chúng ta có thể dễ dàng tìm được nhiều module có sẵn và hiệu quả như TCP/IP stack, X-server cho ứng dụng GUI, hoặc có thể tìm thấy driver cho thiết bị nhúng của mình đã được viết sẵn trong kernel.

Một điểm mạnh khác của Embedded Linux là open source, điều này cho phép người thiết kế can thiệp sâu hơn vào các dịch vụ và module mà hệ điều hành cung cấp. Người thiết kế có thể hiểu rõ hơn về những hàm mà họ gọi và thậm chí có thể thay đổi, tối ưu các hàm này cho thiết bị mình sử dụng. Người thiết kế còn có thể dựa vào các module driver có sẵn để tham khảo cho các driver mà họ sắp viết. Tính open source còn giúp code hỗ trợ bởi kernel có tính tin cậy cao, trước khi được đưa vào kernel source tree, code này đã được test rất nhiều trong cộng đồng và thậm chí nếu có lỗi xảy ra cũng sẽ có patch thay thế trong thời gian ngắn.

Tính sẵn sàng của Embedded Linux là rất cao. Ít có hệ điều hành nào hỗ trợ được nhiều platform và device driver như Linux. Ngoài hỗ trợ phần cứng Linux còn hỗ trợ các giao thức tiêu chuẩn (wifi, bluetooth, ...).

Tất cả những điều trên cho chúng ta thấy tính năng hiệu quả của hệ thống Embedded Linux và cũng những điểm mạnh đó làm cho xu hướng phát triển Embedded Linux ngày càng trở nên quan trọng, càng nhiều công ty đầu tư vào lĩnh vực này và càng nhiều người yêu thích Embedded Linux hơn.

Hình 5.7 – Linus Torvalds, Hình 5.8 – Chú chim cánh cụt,

Luận án tốt nghiệp Chương 5: Mạch Micro2440 5.3.2 H điều hành Embedded Linux trên Micro2440:

Micro2440 đã được nhà sản xuất cài đặt sẵn Embedded Linux với các tính năng chính sau: • Kernel Version •Linux 2.6.29 • File Systems •YAFFS2 •CRAMFS •EXT2 •FAT32 •NFS

• Drivers (all open source) •Drivers for 3 serial ports •DM9000 driver

•Audio driver (UDA1341) (audio recording supported) •RTC driver

•User LED driver •USB host driver

•True color LCD driver (including 1024 x 768 VGA) •Touch screen driver

•USB camera driver

•Drivers for USB mouse, keyboard, flash drive and portable hard disk •SD card driver, supports maximum memory of 32 G

•I2C-EEPROM driver •PWM buzzer driver •LCD backlight driver •A/D converter driver

•Watchdog driver (watchdog reset is cold reset) • Linux Applications and Utilities

•Busybox1.13 (Linux tool kit including basic Linux commands) •Telnet, FTP and inetd (remote login tool)

•BOA (web server)

•Madplay (console based mp3 player) •Snapshot (console based screen print tool)

•ifconfig, ping, route and so on (basic network commands) • Graphic User Interface (Open Source)

•Qt/Embedded 2.2 (x86 and arm)

Luận án tốt nghiệp Chương 5: Mạch Micro2440 •A/D conversion test tool

•LED test tool •User button test tool

•I2C-EEPROM read/write test tool •LCD test tool

•Ping test tool

•USB camera live preview and picture taking •Audio recorder

•Web browser •Watchdog test tool

•Network configuration tool •Backlight control tool

•Language setting tool (English and Chinese) •Handwriting tool (for touch pen testing)

•MMC/SD card and flash drive auto mounting and unmounting

Hình 5.10 – Giao diện Qtopia 2.2 trên Micro2440.

Ta hoàn toàn có thể tự biên dịch 1 phiên bản Embedded Linux từ Open source code Linux Kernel, với các thiết lập về driver tùy ý; hay sử dụng hệ thống File System khác; hay giao diện đồ họa khác Qtopia 2.2 mặc định. Thậm chí cài lại hệ điều hành khác như Windows CE hay Android trên Micro2440.

Luận án tốt nghiệp Chương 5: Mạch Micro2440 5.3.3 Quá trình khởi động Embedded Linux trên Micro2440:

Hệ điều hành Embedded Linux khởi động trên bất cứ thiết bị nào đều qua 4 giai đoạn sau:

1. Internal boot:

Bộ vi xử lý (Micro Processing Unit - MPU) khởi động, 1 chương trình nhỏ trong chip (Internal Bootloader - được xây dựng sẵn trong quá trình sản xuất chip) sẽ tìm trên các thiết bị nhớ (NOR FLASH, NAND FLASH, SPI DATA FLASH, SD Card…) sự tồn tại của chương trình khởi động đầu tiên (1st Bootloader).

Tùy vào từng MPU mà quá trình tìm kiếm này diễn ra khác nhau. Mỗi MPU sẽ hỗ trợ tìm bootloader trên một vài thiết bị nhớ và hỗ trợ cách chỉ định tìm kiếm trên thiết bị nhớ nào (thường bằng cách thiết lập các Jumper).

Internal bootloader sẽ tìm và thực thi 1st Bootloader. Nếu không tìm thấy thì sẽ chuyển sang chờ các thao tác nạp chương trình hay debug…

2. 1st Bootloader:

1st Bootloader là 1 đoạn firmware được viết và biên dịch cho MPU xác định. 1st Bootloader phải được lưu trữ ở sector đầu tiên của thiết bị lưu trữ để MPU có thể tìm thấy.

1st Bootloader có nhiệm vụ khởi động các khối chức năng chính (khối PLL tạo clock hệ thống, khối điều khiển giao tiếp Ram, Rom, ngoại vi cần thiết…), sau đó khởi động Bootloader thứ 2.

3. 2nd Bootloader:

2nd Bootloader thường là những đoạn chương trình khởi động được viết để có thể dùng được cho nhiều loại MPU, nhiều kiến trúc phần cứng khác nhau.

2nd Bootloader có nhiệm vụ chép file ảnh của nhân hệ điều hảnh (Linux Kernel Image) vào RAM, giải nén và truyền các biến môi trường (các tham số về hệ thống như các thông số bộ nhớ, file system ở đâu…), và khởi động Linux Kernel.

4. Linux Kernel:

Linux Kernel truy xuất File System (là hệ thống thư mục, tập tin cần thiết cho hệ điều hành), khởi động driver cho các thiết bị, thực thi các dịch vụ (service) cần thiết của hệ thống. Hoàn tất quá trình khởi động.

Như vậy để khởi động hệ điều hành Linux cho một mạch nhúng, ta cần 4 thành phần cơ bản tham gia: 1st Bootloader, 2nd Bootloader, Linux Kernel, và File System.

Vi xử lý S3C2440A hỗ trợ boot với NOR/NAND FLASH, EEPROM, và nhiều thiết bị lưu trữ khác. Board Micro2440 được trang bị 2MB NOR FLASH và 256MB NAND FLASH, nhà sản xuất đã lưu sẵn 1st Bootloader trên cả NOR và NAND FLASH. Ta có thể chọn boot từ NAND FLASH hay NOR FLASH bằng cách đặt hay không đặt Jumper J1 trên Core board trước khi bật nguồn cho mạch.

1st Bootloader sẽ tìm và chép 2nd Bootloader vào SDRAM sau đó nhảy đến thực thi 2nd bootloader.

2nd Bootloader, Micro2440 sử dụng Vivi Bootloader (hay tên gọi khác là SuperVivi), là 1 bootloader cho các dòng MPU của SAMSUNG, dùng để boot Linux hoặc Windows CE. Khi quá trình boot đến SuperVivi, kết nối Micro2440 với máy PC qua COM1 của Micro2440, ta sẽ có 1 cửa sổ giao diện bằng dòng lênh lệnh (console)

Luận án tốt nghiệp Chương 5: Mạch Micro2440 của SuperVivi trên màn hình máy PC. Tại đây, Vivi cung cấp cho ta một số chức năng cấu hình hệ thống như: xóa, format bộ nhớ FLASH, load và lưu trữ Kernel Image, System backup and Restore…

Micro2440 được nhà sản xuất nạp sẵn SuperVivi trong cả NAND FLASH và NOR FLASH. Tuy nhiên, NOR FLASH dùng cho mục đích sửa chữa, restore hệ thống khi có lỗi, hay để cài lại hệ điều hành mới… NAND FLASH có SuperVivi với những tham số biến môi trường để tự động tiếp tục quá trình boot bằng cách load Linux Kernel sau đó chuyển thực thi cho Linux Kernel.

Mặc định Linux Kernel và Root File System đều được chứa trên NAND FLASH của Micro2440. Linux Kernel cũng được load vào và chạy trên SDRAM.

Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 CHƯƠNG 6

Lp trình điều khin Robot trên Micro2440

6.1 Chn viết chương trình điều khin:

Từ mục tiêu và nhiệm vụ của đề tài đã xác định ở mục 1.3.1, ta cần viết một ứng dụng phần mềm điều khiển Robot tự hành chạy trên hệ điều hành Embedded Linux sao cho làm rõ được thế mạnh của lập trình nhúng trên Embedded Linux so với lập trình firmware điều khiển Robot như trước đây.

Ta chọn viết chương trình ứng dụng: “ĐIỀU KHIỂN DẪN ĐƯỜNG CHO ROBOT TỰ HÀNH BẰNG XỬ LÝ ẢNH”.

Đặt tên cho chương trình là “Ball Tracking”.

Từ những hình ảnh thu được từ 1 camera (sử dụng USB webcam), chương trình sẽ điều khiển Robot di chuyển bám theo 1 quả bóng màu đỏ.

Chương trình có 2 nhiệm vụ (task) phải được xử lý song song:

- Nhận ảnh từ USB webcam, xử lý nhận dạng quả bóng để biết được độ lệch của tâm quả bóng so với trục robot, và khoảng cách ước chừng giữa Robot và quả bóng (dựa vào bán kính của hình ảnh quả bóng thu được).

- Xuất xung PWM ra các chân GPIO điều khiển 3 động cơ để bám theo quả bóng.

6.2 Xác định các bước tiến hành – các công c cn thiết:

6.2.1 Xác định các bước tiến hành:

1/ Ta điều khiển 3 động cơ qua 6 chân GPIO. Vì bản Linux Kernel mặc định khi xuất xưởng của Micro2440 không có driver cho các chân GPIO, nên ta cần biên dịch (Compile) lại Linux Kernel từ source code với GPIO driver được chọn.

2/ Nạp (port) hệ điều hành Linux với Kernel mới tạo.

3/ Compile thư viện OpenCV để chạy trên Embedded Linux của Micro2440. 4/ Viết chương trình điều khiển sử dụng thư viện xử lý ảnh OpenCV, và compile để chạy trên Embedded Linux với Micro2440.

6.2.2 Các công c cn thiết:

a) Cross-Toolchain và Cross-Compiler:

Để biên dịch code sang mã máy, ta cần trình biên dịch (compiler) và các công cụ (tool), gọi là bộ công cụ biên dịch (toolchain).

Khái niệm “Cross-Toolchain” để chỉ bộ công cụ biên dịch thực hiện trên một hệ thống, nhưng kết quả cho ra file thực thi dùng để chạy trên một hệ thống khác.

Ta sử dụng máy tính với hệ điều hành Linux Ubuntu để biên dịch các chương trình cho Micro2440. Cross Toolchain sử dụng là gói "arm-linux-gcc-4.3.2.tar.bz2" download tại http://www.codesourcery.com/

Chi tiết sử dụng Cross Toolchain để biên dịch chương trình cho vi xử lý lõi ARM trên hệ điều hành Linux có thể xem tài liệu “The GNU Toolchain for ARM targets HOWTO” tại địa chỉ http://www.aleph1.co.uk/armlinux/thebook.html/

Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 Các bước cài đặt arm-linux-gcc-4.3.2 lên máy PC Linux Ubuntu: trong cửa sổ Termial của máy PC Linux:

• Tạo thư mục:

# mkdir /user/local/arm # mkdir /user/local/arm/4.3.2

• Giải nén gói “arm-linux-gcc-4.3.2.tar.gz” vào thư mục vừa tạo: # tar xvzf arm-linux-gcc-4.3.2.tar.gz –C/

• Thiết lập biến môi trường:

# export PATH=$PATH:/user/local/arm/4.3.2/bin

Sau đó ta có thể compile các chương trình viết bằng C hay C++ để chạy trên Micro2440. Ví dụ ta compile file “main.c” trong thư mục “/hello_dir” thành file “hello” dùng arm-linux-gcc:

# cd /hello_dir

/hello_dir# arm-linux-gcc –o hello main.c b) Minicom:

Minicom là phần mềm giao tiếp với cổng nối tiếp (cổng COM) chạy trên hệ điều hành Linux. Ta cần sử dụng Minicom làm console trên máy PC Linux, giao tiếp với SuperVivi trên Micro2440 trong quá trình nạp (port) lại hệ điều hành Embedded Linux cho board Micro2440 (quá trình port Linux lên board).

Download và cài đặt gói phần mềm Minicom: # sudo get-install minicom

Cài đặt xong, thiết lập cho Minicom: # minicom –s

Cửa sổ configuration của Minicom hiện lên, chọn Serial port Setup

Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 Thiết lập các thông số:

Hình 6.2 – Thiết lập thông số cho Minicom.

Chú ý chọn Serial Device là /dev/ttyS0 cho COM0 của PC, /dev/ttyS1 cho COM1… Chọn /dev/ttyUSB0 nếu dùng thiết bị “USB-to-COM”.

Sau đó chọn Exit, Minicom sẽ tạo kết nối với cổng COM và ta có thể bắt đầu làm việc. c) USB push:

USB push là một chương trình chạy trên máy PC Linux, giao tiếp với mạch Micro2440 qua cổng USB để thực hiện gửi và nhận file giữa máy PC và Micro2440.

Download và xem cách sử dụng USB push trên website:

http://www.friendlyarm.net/downloads.

6.3 Biên dch Linux Kernel cho Micro2440:

Ta thực hiện biên dịch lại Linux Kernel cho Micro2440 nhằm tích hợp driver cho GPIO vào Kernel.

Linux Kernel rất đồ sộ, để đơn giản, ta sử dụng gói source code “Linux 2.6.32.2” download tại http://www.friendlyarm.net/downloads. Đây là Linux Kernel source code đã được cấu hình các tham số phù hợp với phần cứng mạch Micro2440.

Download và giải nén ta được thư mục “Linux-2.6.32.2”. Trước khi biên dịch, ta cần xóa những thiết lập từ các lần biên dịch trước:

#cd /Linux-2.6.32.2

/Linux-2.6.32.2# make clean

Việc biên dịch một gói phần mềm gồm 2 bước cơ bản: bước cấu hình (config) nhằm mục đích tạo ra file “.config” trong gói source code chứa các thông tin thiết lập cho gói phần mềm; và bước Make để tạo ra các file thực thi.

Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 Trong source code Linux-2.6.32.2 đã download, nhà sản xuất FriendlyARM đã tạo sẵn các file config cấu hình cho Kernel phù hợp với phần cứng Micro2440. Cụ thể có 5 file cấu hình tương ứng cho 5 loại LCD sử dụng với Micro2440:

• config_mini2440_t35 - cho TPO 3.5inch LCD • config_mini2440_l80 - cho Sharp 8inch LCD • config_mini2440_n35 - cho NEC 3.5inch LCD • config_mini2440_a70 – cho Innolux 7inch LCD

• config_mini2440_vga1024x768 – cho màn hình VGA (độ phân giải 1024x768)

Để sử dụng, ta đổi tên file cấu hình tương ứng với loại màn hình đang sử dụng trên board Micro2440 thành “.config”. Ví dụ sử dụng màn hình LCD NEC 3.5inch:

/Linux-2.6.32.2# cp config_mini2440_n35 .config

Thiết lập Cross-compiler như mục 6.2.2, và bắt đầu config Kernel: /Linux-2.6.32.2# make menuconfig

Màn hình giao diện để cấu hình Kernel xuất hiện:

Hình 6.3 – Cấu hình cho Linux Kernel.

Sử dụng các phím mũi tên di chuyển để chọn cho phép hoặc không cho phép, lựa chọn các option tương thích với phần cứng. Chi tiết về các option của Linux Kernel có thể tìm thấy trong tài liệu “Micro2440 User manual” của FriendlyARM hoặc trên website phát triển Linux Kernel: http://www.kernel.org

Như đã nói, FriendlyARM đã cấu hình các tham số cần thiết phù hợp với mạch Micro2440, ta chỉ cần cho phép thêm lựa chọn “GPIO sysfs” trong phần “Device Driver --->”.

Exit, ta đã tạo được file “.config” có các tham số cấu hình cho Linux Kernel phù hợp với Micro2440 và tích hợp GPIO driver.

Luận án tốt nghiệp Chương 6: Lập trình điều khiển Robot trên Micro2440 Build Linux Kernel Image:

/Linux-2.6.32.2# make zImage

Nếu quá trình biên dịch thành công, file “zImage” sẽ được tạo ra trong thư mục “Linux-2.6.32.2/arch/arm/boot”. Đó là file ảnh của Linux Kernel.

6.4 Np li Embedded Linux cho Micro2440:

Việc nạp Embedded Linux (porting Embedded Linux) với Kernel mới vừa tạo nhằm có được driver cho GPIO.

Như đã trình bày, quá trình boot Embedded Linux cần 4 thành phần: 1st bootloader, 2nd bootloader, Linux Kernel Image, và File System.

• 1st bootloader đã được nhà sản xuất cài đặt sẵn trong NOR FLASH và NAND FLASH, ta không cần thay đổi.

• 2nd bootloader: sử dụng SuperVivi, SuperVivi đã được FriendlyARM biên dịch sẵn và có thể download tại http://www.friendlyarm.net/downloads. • Linux Kernel Image là file “zImage” ta vừa tạo được.

• Root File System cũng có thể download tại

http://www.friendlyarm.net/downloads.

Tiến hành port Embedded Linux cho Micro2440 bằng cách sử dụng SuperVivi có sẵn trên NOR FLASH làm console để nạp các bootloader, Linux Kernel, và File System vào NAND FLASH. Thao tác như sau:

Kết nối cổng COM0 của Micro2440 với cồng COM của máy PC Linux, khởi

Một phần của tài liệu Luận văn tốt nghiệp đại học thiết kế ROBOT tự hành với hệ điều hành nhúng LINUX (Trang 38 - 90)

Tải bản đầy đủ (PDF)

(90 trang)