Showing posts with label FriendlyARM. Show all posts
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
- cấu hình configure
- 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
- source biến môi trường đến thư mục đã install taglib:
- build example
- 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
- 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:
- chạy chương trình trên minicom
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
Chương trình ứng dụng đầu tiên Helloworld
1. Build source code
helloworld.c
Export biến môi trường PATH đến cross-compiler:
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:
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
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.
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.
Tag :
FriendlyARM
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:
- 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
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
Tag :
FriendlyARM
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
- Cài đặt chương trình COM/Uart serial trên linux là Minicom
Vào chế độ cài đặt minicom:
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)
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:
- 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
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
Tag :
FriendlyARM

























