Showing posts with label FriendlyARM. Show all posts

Build bootloader, kernel image và rootfs

Thursday, September 24, 2015

Cross compiler thư viện opensource

Trong bài này chúng ta sẽ ví dụ việc build và sử dụng thư viện taglib-1.5, thư viện này dùng để lấy thông tin của các file nhạc.

Các bước thực hiện:
- Giải nén taglib-1.5.tar.gz
- cd  terminal vào thư mục source code taglib-1.5
- export biến môi trường cross-compiler
 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin   

- cấu hình configure
 ./configure --host=arm-none-linux-gnueabi --prefix=/friendlyarm/local \  
 CC=arm-none-linux-gnueabi-gcc \  
 CXX=arm-none-linux-gnueabi-g++  

 make  
 make install  


- example
Trong thư mục taglib-1.5/examples có nhiều ví dụ, chúng ta sẽ test thư viện với chương trình tagreader_c.c

   
 #include <stdio.h>  
 #include <tag_c.h>  
   
 #ifndef FALSE  
 #define FALSE 0  
 #endif  
   
 int main(int argc, char *argv[])  
 {  
  int i;  
  int seconds;  
  int minutes;  
  TagLib_File *file;  
  TagLib_Tag *tag;  
  const TagLib_AudioProperties *properties;  
   
  taglib_set_strings_unicode(FALSE);  
   
  for(i = 1; i < argc; i++) {  
   printf("******************** \"%s\" ********************\n", argv[i]);  
   
   file = taglib_file_new(argv[i]);  
   
   if(file == NULL)  
    break;  
   
   tag = taglib_file_tag(file);  
   properties = taglib_file_audioproperties(file);  
   
   printf("-- TAG --\n");  
   printf("title  - \"%s\"\n", taglib_tag_title(tag));  
   printf("artist - \"%s\"\n", taglib_tag_artist(tag));  
   printf("album  - \"%s\"\n", taglib_tag_album(tag));  
   printf("year  - \"%i\"\n", taglib_tag_year(tag));  
   printf("comment - \"%s\"\n", taglib_tag_comment(tag));  
   printf("track  - \"%i\"\n", taglib_tag_track(tag));  
   printf("genre  - \"%s\"\n", taglib_tag_genre(tag));  
   
   seconds = taglib_audioproperties_length(properties) % 60;  
   minutes = (taglib_audioproperties_length(properties) - seconds) / 60;  
   
   printf("-- AUDIO --\n");  
   printf("bitrate   - %i\n", taglib_audioproperties_bitrate(properties));  
   printf("sample rate - %i\n", taglib_audioproperties_samplerate(properties));  
   printf("channels  - %i\n", taglib_audioproperties_channels(properties));  
   printf("length   - %i:%02i\n", minutes, seconds);  
   
   taglib_tag_free_strings();  
   taglib_file_free(file);  
  }  
   
  return 0;  
 }  


- source biến môi trường đến thư mục đã install taglib:
DEPEND_LIB_DIR=/friendlyarm/local  
export CFLAGS="-I${DEPEND_LIB_DIR}/include -I${DEPEND_LIB_DIR}/include/taglib"
export CPPFLAGS=-I${DEPEND_LIB_DIR}/include
export LDFLAGS=-L${DEPEND_LIB_DIR}/lib
export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig
export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib
export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin
export LIBS="-ltag -ltag_c"  

- build example
 arm-none-linux-gnueabi-gcc tagreader_c.c -o tagreader_c ${CFLAGS} ${LDFLAGS} ${LIBS}  

- Copy toàn bộ chương trình tagreader_c và thư viện taglib đã build vào thư mục NFS (hoặc sdcard), vd:


- Mở minicom, mount và cd vào thư mục NFS của taglib
 mount -o nolock,rsize=1024,wsize=1024 192.168.1.2:/friendlyarm/usr3 /friendlyarm  

- source biến môi trường của taglib, vd đường dẫn là /friendlyarm/taglib, tương tự như khi build chương trình tagreader_c vậy:

 DEPEND_LIB_DIR=/friendlyarm/taglib   
 export CFLAGS="-I${DEPEND_LIB_DIR}/include -I${DEPEND_LIB_DIR}/include/taglib"  
 export CPPFLAGS=-I${DEPEND_LIB_DIR}/include  
 export LDFLAGS=-L${DEPEND_LIB_DIR}/lib  
 export PKG_CONFIG_PATH=${DEPEND_LIB_DIR}/lib/pkgconfig  
 export LD_LIBRARY_PATH=${DEPEND_LIB_DIR}/lib  
 export PATH=$PATH:${DEPEND_LIB_DIR}/bin:${DEPEND_LIB_DIR}/sbin  
 export LIBS="-ltag -ltag_c"  

- chạy chương trình trên minicom

 [root@FriendlyARM taglib]# ./tagreader_c hanh_phuc_neu_co_em.mp3   
 ******************** "hanh_phuc_neu_co_em.mp3" ********************  
 -- TAG --  
 title  - "H�á�º�¡nh Ph�Ã�ºc N�á�º�¿u Anh C�Ã�³ Em "  
 artist - "Ph�Ã�ºc b�á�»��“ "  
 album  - "mp3.zing.vn"  
 year  - "0"  
 comment - "Zing MP3 - Dinh cao am nhac"  
 track  - "0"  
 genre  - ""  
 -- AUDIO --  
 bitrate   - 128  
 sample rate - 44100  
 channels  - 2  
 length   - 3:05  
   



Wednesday, September 23, 2015

Chương trình ứng dụng đầu tiên Helloworld

1. Build source code
helloworld.c
 #include <stdio.h>  
   
 int main(int argc, char **argv)  
 {  
   
   printf("Hello world ! \n");  
   
   return 1;  
 }  


Export biến môi trường PATH đến cross-compiler:
 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin  

 arm-none-linux-gnueabi-gcc helloworld.c -o helloworld  


Chương trình helloworld được build cho board arm, vì thế nếu bạn cố tình chạy nó trên host (x86) thì sẽ không được:

 $ ./helloworld   
 bash: ./helloworld: cannot execute binary file  

2. Run application
- Copy chương trình ra SDCard
- Khởi động board cùng với sdcard được gắn vào
- SDCard trên board sẽ được mount vào thư mục /sdcard
- cd vào thư mục có helloworld trên sdcard
- Chạy chương trình

 # ./helloworld   
 Hello world !   
   

Cách copy lên sdcard tỏ ra hơi mất công, nên cách tốt nhất hay được dùng khi develop chương trình là dùng mount NFS đã được đề cập ở bài trước.

Quy trình cài đặt Linux lên KIT nhúng

1. Boot Mode

Như đã đề cập ở bài trước, board mini2440 có NOR flash chứa chương trình tương tự như Bios của máy tính, có chức năng để cài đặt Linux lên NAND flash. Ở các board cũ, NOR chứa chương trình dùng bootloader có tên là Supervivi, còn các board mới từ sau 2014 được đổi sang dùng Superboot. Supervivi chỉ cho phép cài đặt Linux vào NAND thông qua cáp USB, còn Superboot thì qua SDCard.

NAND flash chứa các thành phần đầy đủ của hệ thống bao gồm:
- Bootloader
- Linux kernel
- Rootfs

2. Cài đặt Linux lên board
Trong phần này chúng ta mặc định là các thành phần bootloader, kernel và rootfs đã có sẵn (lấy mấy file đã được build sẵn, xem bài trước)

2.1 NOR dùng Supervivi
Chuẩn bị:
+ usbpush (phần mềm để push bootloader, kernel, rootfs từ host lên NAND flash)
+ Linux
    - supervivi-128M (bootloader cho board có Flash 1G)
    - zImage_P35 (kernel cho board có màn hình P35)
    - rootfs_qtopia_qt4.img





- Bật Boot Mode switch của board sang NOR
- Bật nguồn
- Trên host vào chương trình minicom



- Bật Boot Mode switch sang NAND
- Bấm nút reset trên board

2.2 NOR dùng Superboot
Chuẩn bị:
+ SDCard format FAT32
+ Linux
    - FriendlyARM.ini
    - Superboot2440.bin
    - zImage_P35
    - rootfs_qtopia_qt4.img

Tất cả được đặt trong thư mục images trong sdcard



Nội dung FriendlyARM.ini:
 #This line cannot be removed. by FriendlyARM(www.arm9.net)  
 USBMode = No  
 Action = Install  
 OS = Linux  
 VerifyNandWrite = Yes  
 LowFormat = No  
 Status Type = Beeper| LED  
 # Linux part  
 Linux-BootLoader = Superboot2440.bin  
 Linux-Kernel = zImage_P35  
 Linux-CommandLine = noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0   
 Linux-RootFs-InstallImage = rootfs_qtopia_qt4.img  


- Gắn sdcard lên board
- Bật Boot Mode switch sang NOR
- Bật nguồn board
- Mở minicom trên host để xem quá trình install
...
- Sau khi quá trình install hoàn tất, bật Boot Mode switch sang NAND
- Bấm nút reset trên board

Cài đặt môi trường phát triển board mini2440

Bài viết liên quan:
- Cài đặt môi trường làm việc


Lắp đặt target (board mini2440) và host (máy tính) như hình trên.


1. Target
Board mini2440 có hai bộ nhớ Flash là NAND và NOR. Trong đó:
- NOR: Chứa chương trình boot loader mặc định có chức năng tương tự như Bios của máy tính, dùng để install linux vào NAND flash
- NAND: Chứa toàn bộ hệ thống linux, bao gồm boot loader (supervivi or superboot or uboot), kernel và rootfs


Mặc định boot loader được cài là supervivi (cài linux vào NAND thông qua cáp USB, đối với các board cũ trước đây) hoặc superboot (cài linux vào NAND thông qua SDCard, đối với các board mới sau này).
Board mới mua về đã được cài sẵn linux, chúng ta bắt đầu khởi động board bằng việc chắc chắn rằng Boot Mode Switch được đặt ở chế độ NAND.

2. Host
Máy tính phải đảm bảo các yêu cầu:
- Cài đặt Linux OS (ubuntu, fedora, ...), trong blog này sử dụng Fedora Spin Mate
- Cài đặt SDK cho board mini2440
  Truy cập http://www.friendlyarm.net/downloads để tải bộ SDK


Sau khi tải toolchain về tiến hành giải nén ra thư mục /opt như hình dưới:


Cần export biến môi trường PATH đễn thư mục bin của toolchain khi cần cross-compile
 export PATH=$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin  


- Cài đặt chương trình COM/Uart serial trên linux là Minicom
 #yum install minicom  

Vào chế độ cài đặt minicom:
 #minicom -s   

Dùng các phím lên/xuống để chọn trên menu


Dùng các phím chữ tương ứng a, c, d, e, f, g để chọn các option, bấm Esc để trở về dòng "Change which setting?", bấm Enter để về menu chính.



3. Khởi động
- Kết nối board và máy tính như hình trên cùng
- Boot mode switch của board để ở chế độ NAND
- Bật nguồn board
- Trên máy tính vào minicom bằng lệnh (chú ý ở chế độ root)
 #minicom  



4. Mount thư mục NFS
Xem lại hướng dẫn:
- NFS Server

- Host




- Target
   Mặc định board mini2440 được đặt địa chỉ 192.168.1.230, nếu muốn set địa chỉ khác thì dùng lệnh:

 ifconfig eth0 192.168.1.3 netmask 255.255.255.0  





Tuesday, September 22, 2015

Giới thiệu KIT nhúng FriendlyARM Mini2440








Specification:
Dimension: 100 x 100 mm
CPU: 400 MHz Samsung S3C2440 ARM926T (max freq. 533 MHz)
RAM: 64 MB, 32 bit Bus
Flash: up to 1GB NAND Flash
EEPROM: 256 Byte (I2C)
Ext. Memory: SD-Card socket
Serial Ports: 1x DB9 connector (RS232), total: 3x serial port connectors
USB: 1x USB-A Host 1.1, 1x USB-B Device 1.1
Audio Output: 3.5 mm stereo jack
Audio Input: Connector + Condenser microphone
Ethernet: RJ-45 10/100M (DM9000)
RTC: Real Time Clock with battery (CR1220)
Beeper: PWM buzzer
Camera: 20 pin (2.0 mm) Camera interface
LCD Interface: 41 pin connector for FriendlyARM Displays and VGA Board
User Inputs: 6x push buttons and 1x A/D pot
User Outputs: 4x LEDs
Expansion: 40 pin System Bus, 34 pin GPIO, 10 pin Buttons (2.0 mm)
Debug: 10 pin JTAG (2.0 mm)
Power: regulated 5V (DC-Plug: 1.35mm inner x 3.5mm outer diameter)
Power Consumption: Mini2440: 0.3 A, Mini2440 + 3.5" LCD: 0.6 A, Mini2440 + 7" LCD: 1 A
OS Support
    - Windows CE 5 and 6
    - Linux

Xem chi tiết: http://www.friendlyarm.net/products/mini2440

Download  http://www.friendlyarm.net/downloads
- Manuals
- Software (cross-compiler, uboot, linux, rootfs, qt-everywhere, ...)
- Schematics
- Datasheets


- Copyright © Lập trình hệ thống nhúng Linux . Powered by Luong Duy Ninh -