顯示具有 android 標籤的文章。 顯示所有文章
顯示具有 android 標籤的文章。 顯示所有文章

2009年12月22日

嵌入式linux重要筆記(大概吧)

在root filesystem中,裡面的/etc/init.d/rcS新增

mount /dev/sda1 /CF
chroot /CF
./init
即可不須透過手動-->rootfs-->Android可自動執行

印象中不是我去實作的,所以此筆記待確認

2009年11月18日

android kernel設定 待解說

ARM System Type ->pxa2xx/pxa3xx-based
/*ARN cpu for pxa2xx and pxa3xx*/
Intel Implementations ->PXA3XX form factor platform (aka littleton)
/*Intel平台for pxa3xx (又名 littleton)*/
Thumb Instruction -> support thumb user binaries
/*對於儲存系統資料匯流排為16位的應用系統,ARM體系提供了Thumb指令集


7.ARM指令與Thumb指令的區別
答:在ARM架構中,ARM指令集中的指令是32位的指令,其執行效率很高。對于儲存系統資料匯流排為16位的應用系統,ARM體系提供了Thumb指令集。Thumb指令集是對ARM指令集的一個子集重新編碼得到的,指令長度為16位。通常在處理器執行ARM程式時,稱處理器處于ARM狀態;當處理器執行Thumb程式時,稱處理器處于Thumb狀態。Thumb指令集并沒有改變ARM體系地層的程式設計模型,只是在該模型上加上了一些限制條件。Thumb指令集中的資料處理指令的運算元仍然為32位,指令定址位址也是32位的。
http://tw.myblog.yahoo.com/blue-comic/article?mid=542&prev=546&next=533&l=f&fid=20

*/

ARM EABI ->use the ARM EABI to compile the kernel


ABI

ABI,application binary interface,應用程式和作業系統的"low-level interface"。意思是,ABI有一套規則,如果遵循這個規則產生出的object,就能在相對應的系統上正確的運作。這個規則包括了data type的size,alignment,calling convention,function參數傳遞與回傳值,system call的調用等。很明顯的,這跟平台很有關係。比如說,不管用哪一個compiler,只要能生出符合ELF格式的binary,就可以在Linux上跑,或呼叫其library。

而EABI,embedded-application binary interface則規定了embedded software program的規則。跟一般的作業系統的主要差異為: 應用程式可以使用privileged instruction,dynamic linking不是required,更簡潔的stack frame用以省下memory。

ARM EABI

而arm 的EABI有些改進,特別是floating point的運算。現在的arm應該都有實作FPA(Floating Point Accelerator),但如果compiler使用了FPU來做floting的運算,且CPU沒有FPU時,就會產生exception。其panelty會是將指令轉為software的floating運算,當然系統也就變慢了。所以支援EABI的kernel與Cross-compiler,加上支援有實作FPA的arm,performance就會好很多。

http://kezeodsnx.pixnet.net/blog


boot option ->
/*沒差啦~這是kernel的開機設定*/

floating point emulation->NWPPE math emulation
userspace binary formats->kernel support for ELF binaries
power management support
sysfs interface->?
networking ->TCP/IP networking
screen resolution ->Horizonta 640 / vertical 480
input event->event interface
keypad driver->pxa27x/pxa3xx keypad support
touchschreen driver ->WM9713 Touchscreen interface support
serial port driver ->PXA serial port support和console on pxa serial port
network file system->NFS client support
                   ->NFS client supprot for NFS version
                   ->NFS client support for NFS version4 (EXPERIMENTAL)
                   ->root file system on NFS
save an alternate configuration file

2009年11月12日

inittab和rcS初探

本來只是想說要看pxa300啟動時跑的畫面的,結果...

BusyBox v1.01 (2006.08.31-08:53+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.
Processing /etc/profile... Done


找到了/etc/profile
E:\cygwin\home\Jim\300\rel\target\rootfs_from_rootfs_tar_gz\etc\profile
echo
echo -n "Processing /etc/profile... "
export QTDIR="/usr/qpe"
export PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin"
export LD_LIBRARY_PATH="/usr/local/lib:/usr/lib:/lib:/usr/qpe/lib:/lib/lib"

export HOSTNAME="$(hostname)"

export OLDPWD=/root
export HOME=/root

後來又想到之前提過的init和rcS檔,所以就翻了一下學長論文,其中提到
Linux kernel 在執行完系統初始化設定(包含設置記憶體、Scheduler、中斷向量表 載入驅動程式等等) 之後,會將控制權以 kernel thread 的形式轉移給 user space的第一個程式:init

在 Embedded Linux 的環境下,init 一般包含於 busybox 中

當Linux kernel將控制權轉移給init時,init會讀取/etc下的相關檔案,一般是讀取/etc/inittab,再由/etc/inittab引入/etc/init.d/rcS等相關檔案執行系統環境的設定及初始化的動作,包含掛載檔案系統、執行相關應用程式及產生shell讓使用者可以透過特定指令與作業系統互動;busybox透過以上的流程來完成系統最後的相關設定。


於是就跑去研究了一下busybox,inittab的語法(和pc上的busybox不太一樣)

Understanding Busybox Inittab
http://linuxembedded.blogspot.com/2006/11/understanding-busybox-inittab.html

BusyBox init 详解
http://blog.chinaunix.net/u3/100239/showart_2035495.html

busybox的init初始化进程
http://linux.chinaunix.net/techdoc/net/2009/02/11/1061665.shtml

其實在busybox的目錄下就有一個inittab範例,說明都寫得很詳細了
E:\cygwin\home\Jim\release-sourceforge\android-pxa270\app\busybox-1.6.1\examples\inittab
用pxa300的inittab和學長的tiny rootfs的inittab比較過後,發現長得差不多

E:\cygwin\home\Jim\300\rel\target\rootfs_from_rootfs_tar_gz\etc\inittab
::sysinit:/etc/init.d/rcS
ttyS0::respawn:-/bin/sh
#ttyS2::respawn:-/bin/sh
#tty1::respawn:-/bin/sh
#tty2::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -

E:\cygwin\home\Jim\release-sourceforge\android-pxa270\rootfs\rootfs_from_tiny_rootfs_tgz\etc\inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
#::once:-/bin/sh
#ttyS0::respawn:-/bin/sh
#ttyS2::respawn:-/bin/sh
#tty1::respawn:-/bin/sh
#tty2::respawn:-/bin/sh
::ctrlaltdel:/bin/umount -a -
看完後,摸摸腦袋,還是不太了解,總之inittab之後要執行的就是rcS啦,到時候會把要開機所做的事情都放在那邊,設定路徑等等的...


E:\cygwin\home\Jim\release-sourceforge\android-pxa270\rootfs\rootfs_from_tiny_rootfs_tgz\etc\init.d\rcS
#! /bin/sh

# Set the path
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

hostname -F /etc/HOSTNAME

# mount proc and devpts filesystem
/bin/mount -a
mount -o remount,rw /dev/root /

if [ -n "$IN_INITLOG" ]; then
    IN_INITLOG=
fi

if [ ! -f /etc/HOSTNAME ]; then
    echo ${HOSTNAME} > /etc/HOSTNAME
fi

touch /var/log/wtmp
chmod 0664 /var/run/utmp /var/log/wtmp

# Delete stale subsystem files.
rm -f /var/lock/subsys/*

# Delete stale pid files
rm -f /var/run/*.pid

# Load modules
if [ -f /etc/rc.d/rc.modules ]; then
 /etc/rc.d/rc.modules
fi

/etc/init.d/rc.local

NO-CARRIER 網卡無法啟動

 工作時,由於想要啟動linux OS的網卡, 發現某張新設定的網卡一直無法啟動,就算下指令UP了,但是也沒有順利啟動 所以爬文後,想要確認該網卡的status, 發現某行為: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu...