2014年11月25日 星期二

Openshot 影像處理軟體

Openshot 主要功能為影片的剪輯、修改,
最大的強項是「穩定、快速、直覺」,
可以直接匯入影片,並且穩穩的跑出影像和聲音,
完全不用調整任何設定!

一、安裝
sudo apt-get update && apt-get install openshot

二、執行
一般 user 下,直接執行 openshot,介面如下:


三、操作

通常進來 openshot 後,第一步驟是「匯入檔案」,
接著,將影音檔拉到下方的影音軌。


可以點上面的「+ 加入影音軌」,可用於穿插字幕、聲音、動畫、其它影像…等,而按右鍵可以「移除影音軌」。

拉動紅色線,選好位置後可以「加入標記」,插入後,
可以方便做剪輯,於紅線上方點右鍵可以依紅線位置下
「全部剪輯切片」,之後可以針對需求做片段的特效,
或改部份片段影片的速度…等等。

基本上,使用都很直覺,
以非藝術工作專業的使用者來說已經相當夠用,

最後剪輯完記得「匯出視訊」,我設定匯出 .avi 如下圖:







Reference:
http://way3sec.blogspot.tw/2010/04/openshot-video-editor.html

建立 Rootfs


一、先準備 arm.img 檔

0. 位置目錄(一般 User 權限)

cd ~/qemu_img

1. 參考 建立一個 arm.img 來建立 arm.img。


2. 做一個最原始檔案的備份

cp arm.img arm_OK.img

3. 將 QEMU 開機

參考 用 QEMU 來開機 arm.img 第 6 步驟
sh runarm.sh

二、第一階段 Rootfs 瘦身

0. 位置

用 QEMU 開啟 arm.img ,登入 Root ,在 QEMU 內瘦身。

1. ATP 更新、清除

apt-get update
apt-get clean
rm -rf /var/lib/apt/lists/*
rm -rf /var/cache/apt/pkgcache.bin
rm -rf /var/cache/apt/srcpkgcache.bin

2. 已安裝套件 (依需求選擇)

視窗環境、瀏灠器等,看有沒有需求,
也可以選擇移除還是留著:
apt-get remove xorg iceweasel

3. 關機 QEMU


三、第二階段 Rootfs 瘦身

0. 位置 (一般 user)

cd ~/qemu_img

1. 做備份紀錄

這邊備份的檔名,以今天日期 arm_1125.img 來做備份。
qemu-img -O raw arm.img arm_1125.img

2. 掛載 arm.img

可以參考 建立虛擬 SD Card 的 loset、mount 步驟,
下面是用較快速的方法來掛載,概念一樣 (要做 offset )。
mount -o loop, offset=`expr 512 \* 2048` arm.img /mnt

3. 建立裝 Rootfs 的資料夾

mkdir ~/qemu_img/rootfs

4. 複製 (ROOT)

將 arm.img 內的檔案複製到 rootfs
rsync -av /mnt/* ~/qemu_img/rootfs/

5. 開始檔案瘦身,刪除不必要的檔案(ROOT)

切記,此步驟在 root 權限下,要非常小心,
注意目錄位置,不要刪錯檔案了!

下面幾個,可以直接刪除:
rm -rf ~/qemu_img/rootfs/root/.cache
rm -rf ~/qemu_img/rootfs/root/.mozilla
rm -rf ~/qemu_img/rootfs/usr/share/man/*
rm -rf ~/qemu_img/rootfs/usr/share/doc/*
rm -rf ~/qemu_img/rootfs/boot/*
rm -rf ~/qemu_img/rootfs/dev/.udev
rm -rf ~/qemu_img/rootfs/var/log/*

這邊有兩個資料夾,要刪除語系資料,
只留我們需要的:

~/qemu_img/rootfs/usr/share/locale/
我們留 en_US、zh_TW,其它殺掉,
可以使用 rm 或 mc 指令來留、刪。

~/qemu_img/rootfs/usr/share/i18n/locale/
這邊留 C、POSIX、en_US、zh_TW,其它殺掉,
一樣可以使用 rm 或 mc 指令來留、刪。

接下來是核心 modules ,一樣刪除,接著
參考文章 編譯 ARM Linux 核心,第七步驟,
把我們做好的模組複製進來該目錄:
rm -rf ~/qemu_img/rootfs/lib/modules/3.2.0-4-versatib
rsync -av ~/qemu_img/kernel/modules/lib/3.4.100 ~/qemu_img/rootfs/lib/modules/

全部瘦身完後,可以在目錄下,
用指令來查看各個目錄中容量較大的東西有哪幾項:
du -sh * | grep M

~/qemu_img/rootfs 目錄,輸出如下:
5.9M  bin
4.7M  boot
4.4M etc
42M lib
5.1M sbin
354M  usr
37M  var

~/qemu_img/rootfs/usr 目錄,輸出如下:
36M bin
192M lib
4.3M sbin
122M share

6. 卸載 arm.img

先看一下 /mnt 有沒有在使用中,卸載需要離開該目錄。
lsof /mnt

卸載
umount /mnt

解除連接(注意順序 大 -> 小)
losetup -a
losetup -d /dev/loop1
losetup -d /dev/loop0
losetup -a

四、設定 Rootfs

1. ~/qemu_img/rootfs/etc/fstab

改成我們需要的設定:
proc            /proc        proc    defaults           0   0
/dev/mmcblk0p2   /           auto   errors=remount-ro   0   1
/dev/mmcblk0p1   /boot       auto   defaults            0   0

2. ~/qemu_img/rootfs/etc/inittab

最後一行加上:
T2:23:respawn:/sbin/getty -L ttyO2 115200 vt102

3. ~/qemu_img/rootfs/etc/network/interfaces

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet dhcp

4. ~/qemu_img/rootfs/etc/resolv.conf

nameserver 8.8.8.8

5. ~/qemu_img/rootfs/etc/hostname

隨便自訂 (例如 leenix)

五、放到 sdcard.img 中

參考 建立虛擬 SD Card 的掛載方式,
將 Rootfs 放至到 sdcard.img 第二分割區。

sdcard1 -> 第 1 個分割區,FAT 16/32 格式,有打開開機旗標,
內含檔案:
-rwxr-xr-x 1 root root   45128 2012-10-30 22:19 MLO
-rwxr-xr-x 1 root root 1215711 2012-10-30 22:19 u-boot
-rwxr-xr-x 1 root root  294672 2012-10-30 22:19 u-boot.bin
-rwxr-xr-x 1 root root  294736 2012-10-30 22:19 u-boot.img
-rwxr-xr-x 1 root root       1 2012-10-30 23:29 uEnv.txt
-rwxr-xr-x 1 root root 2475616 2012-10-30 22:15 uImage

sdcard2 -> 第 2 個分割區,ext4 格式,內含 rootfs 的檔案。





Reference:
http://pominglee.blogspot.tw/2012/10/rootfs.html

http://pominglee.blogspot.tw/2012/11/rootfs.html

2014年11月22日 星期六

gtk-recordmydesktop 錄影工具

一、安裝

apt-get install gtk-recordmydesktop recordmydesktop ffmpeg

二、操作

1. 開啟軟體

gtk-recordmydesktop

2. 出現操作介面,如圖


3. 按紅點,開始錄影錄音…


4. 完成錄影

Ctrl + Alt + S

5. 輸出到家目錄或指定目錄


6. 轉檔 .ogv -> .avi

ffmpeg -i out.ogv -vcodec mpeg4 -sameq -acodec libmp3lame out.avi

三、其他

1. 錄音

可以安裝 gnome-alsamixer ,
用來調整 Mic 的音量設定,

我的 Mic 是插主機後方,設定如下圖:

2. 播放

可以使用 mplayer 播 .ogv 格式之影片檔。

3.整理 Shell Script 快速轉檔

vi toAVI.sh
# !/bin/bash
# .ogv to .avi

if [ -z $1 ] || [ -z $1 ] ;then
        echo
        echo ====== Usage =========
        echo "toAVI.sh [input.ogv] [output.avi]" 
        exit 0
fi

ffmpeg -i $1 -vcodec mpeg4 -sameq -acodec libmp3lame $2








Reference:
http://blog.longwin.com.tw/2009/04/linux-record-recordmydesktop-2009/

http://www.cyberciti.biz/faq/linux-unix-bsd-appleosx-convert-ogv-to-avi-video-audio/

2014年11月4日 星期二

u-boot 編譯

~/qemu_image/bootloader -> 放置 u-boot

一、安裝 toolchain

參考前面文章 安裝 ARM toolchain

二、下載 u-boot


本文下載最新版 u-boot-latest.bz2 (u-boot-2014-07)

mkdir -p ~/qemu_image/bootloader
cd ~/qemu_image/bootloader
wget ftp://ftp.denx.de/pub/u-boot/u-boot-latest.bz2
tar xfva  u-boot-latest.bz2

會得到目前最新版 u-boot-2014.10 。

三、查看設定參數

先設我們要用板子是 Beagle Board…
cd ~/qemu_image/bootloader/u-boot-2014.10/
vi boards.cfg

內容如下(可以得知參數為 omap3_beagle ):
omap3_beagle                 arm         armv7       beagle              ti             omap3

下指令設定參數 config
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- omap3_beagle_config

設定完成會出現:
Configuring for omap3_beagle board...

四、編譯 u-boot

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- all -j ${core number}

編完會出現四個檔案:
MLO
u-boot
u-boot.bin
u-boot.img

五、測試 u-boot 開機

cat MLO u-boot u-boot.bin u-boot.img > sd.img
qemu-system-arm -M beagle -nographic -sd sd.img

結果會因為沒核心,而當機,如下輸出:
U-Boot SPL 2012.07 (Oct 04 2012 - 11:43:34)
Texas Instruments Revision detection unimplemented
OMAP SD/MMC: 0
mmc_init_stream: timedout waiting for cc!
spl: mmc init failed: err - -19
### ERROR ### Please RESET the board ###


離開 QEMU 方法:
先按 Ctrl + A
放開 Ctrl + A
再單按 X 鍵

Debug
開虛擬機出現下面訊息:
qemu: hardware error: no boot device found
CPU #0:
R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=400140a4
PSR=400001d3 -Z-- A svc32
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
s32=00000000 s33=00000000 d16=0000000000000000
s34=00000000 s35=00000000 d17=0000000000000000
s36=00000000 s37=00000000 d18=0000000000000000
s38=00000000 s39=00000000 d19=0000000000000000
s40=00000000 s41=00000000 d20=0000000000000000
s42=00000000 s43=00000000 d21=0000000000000000
s44=00000000 s45=00000000 d22=0000000000000000
s46=00000000 s47=00000000 d23=0000000000000000
s48=00000000 s49=00000000 d24=0000000000000000
s50=00000000 s51=00000000 d25=0000000000000000
s52=00000000 s53=00000000 d26=0000000000000000
s54=00000000 s55=00000000 d27=0000000000000000
s56=00000000 s57=00000000 d28=0000000000000000
s58=00000000 s59=00000000 d29=0000000000000000
s60=00000000 s61=00000000 d30=0000000000000000
s62=00000000 s63=00000000 d31=0000000000000000
FPSCR: 00000000
已經終

解決:
fdisk sd.img
a
1
w

將開機選項 * 加到 sd.img 第一分割區。






Reference:

安裝 ARM toolchain

官網 Embedded Debian Linux

一、加入 ARM Toolchain 鏡像站位置

sudo vi /etc/apt/sources.list

加入鏡像站 (squeeze)
deb http://www.emdebian.org/debian/ squeeze main

如果上面的鏡像站掛了,可以試試下面的鏡像站 (2014/12/02 更新,來源在此)
deb http://emdebian.bytesatwork.ch/mirror/toolchains squeeze main

二、更新及安裝

1. 先更新套件

sudo apt-get update

要有看到更新到 http://www.emdebian.org squeeze/main .......... 的東東。

#########################################################################
Debug 1:
W: GPG error: http://www.emdebian.org wheezy Release: 由於無法取得它們的公鑰,以下簽章無法進行驗證: NO_PUBKEY B5B7720097BB3B58

解決 1:
apt-get install emdebian-archive-keyring
#########################################################################

2. 安裝 toolchain

sudo apt-get install gcc-4.4-arm-linux-gnueabi cpp-4.4-arm-linux-gnueabi g++-4.4-arm-linux-gnueabi

#########################################################################
Debug 2:
以 apt 安裝 toolchaain 出現錯誤訊息:

有些套件無法安裝。這可能意謂著您的要求難以解決,或是若您使用的是
unstable 發行版,可能有些必要的套件尚未建立,或是被移出 Incoming 了。
以下的資訊或許有助於解決當前的情況:

下列的套件有未滿足的相依關係:
 cpp-4.4-arm-linux-gnueabi : 相依關係: libgmp3c2 但它卻無法安裝
 g++-4.4-arm-linux-gnueabi : 相依關係: libgmp3c2 但它卻無法安裝
E: 無法修正問題,您保留 (hold) 了損毀的套件。

Sol 2:
Debian 官方下載 libgmp3c2_4.3.2 ,接著:
sudo dpkg -i libgmp3c2_4.3.2+dfsg-1_amd64.deb
#########################################################################

三、做 sub-link

sudo ln -s /usr/bin/arm-linux-gnueabi-gcc-4.4 /usr/bin/arm-linux-gnueabi-gcc
sudo ln -s /usr/bin/arm-linux-gnueabi-g++-4.4 /usr/bin/arm-linux-gnueabi-g++
sudo ln -s /usr/bin/arm-linux-gnueabi-cpp-4.4 /usr/bin/arm-linux-gnueabi-cpp


四、測試及驗證

1. 先看一般 x86_64 的 gcc 版本:

gcc -v

其輸出:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian 4.7.2-5' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --enable-objc-gc --with-arch-32=i586 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.7.2 (Debian 4.7.2-5)

2. 接著看 ARM 版 gcc 版本:

arm-linux-gnueabi-gcc -v

其輸出:
Using built-in specs.
Target: arm-linux-gnueabi
Configured with: ../src/configure -v --with-pkgversion='Debian 4.4.5-8' --with-bugurl=file:///usr/share/doc/gcc-4.4/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.4 --enable-shared --enable-multiarch --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/arm-linux-gnueabi/include/c++/4.4.5 --libdir=/usr/lib --enable-nls --enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --disable-sjlj-exceptions --enable-checking=release --program-prefix=arm-linux-gnueabi- --includedir=/usr/arm-linux-gnueabi/include --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=arm-linux-gnueabi --with-headers=/usr/arm-linux-gnueabi/include --with-libs=/usr/arm-linux-gnueabi/lib
Thread model: posix
gcc version 4.4.5 (Debian 4.4.5-8)

五、編寫程式測試

1. 寫一個 hello.c

vi hello.c
#include 
main(){
printf("Hello, World\n");
}


2. 編譯(x86_64):

gcc hello.c -o hello
file hello

輸出:
hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x320c1bcd829c0a6407a0331f5243f03110656ee8, not stripped

可能在 x86_64 的機器下直接執行:
./hello

輸出:
Hello, World

3. 編譯(arm):

arm-linux-gnueabi-gcc hello.c -o hello_arm
file hello_arm

輸出:
hello_arm: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, BuildID[sha1]=0x629d4407541731dc7c773ccd05d5bcb4811fa0e9, not stripped

只能在 ARM 的機器下才可以執行。


六、安裝 Jessie 版 ARM Toolchains

參考官方的方法:https://wiki.debian.org/CrossToolchains

1. 加入鏡像站到 /etc/apt/sources.list

deb http://emdebian.org/tools/debian/ jessie main

2.安裝 archive key

curl http://emdebian.org/tools/debian/emdebian-toolchain-archive.key | sudo apt-key add -

3. 更新並安裝套件

sudo dpkg --add-architecture armhf 
sudo apt-get update 
sudo apt-get install crossbuild-essential-armhf








編譯 ARM Linux 核心


~/qemu_image/ -> 放置 ARM image 之目錄
~/qemu_image/kernel/ -> 放置 ARM Linux 核心編譯目錄
~/qemu_image/kernel/modules -> 放置 ARM Linux 核心模組目錄

一、先確定使用的 ARM Board

在這邊假設我們要使用 Beagle Board ,去官方找硬體 Datasheet ,可以知道其 CPU 為 OMAP 3530(Cortex A8) ,其它資訊可參考:
Beagle Board 官方網站 (http://beagleboard.org/)
OMAP 3530(Cortex A8) 德洲儀器官網 (http://www.ti.com/product/omap3530?247SEM)

二、查看 QEMU 支援

qemu-system-arm -cpu ?

我們看有沒有支援 (Cortex A8) ,指令輸出如下:
Available CPUs:
  arm1026
  arm1136
  arm1136-r2
  arm1176
  arm11mpcore
  arm926
  arm946
  cortex-a15
  cortex-a8
  cortex-a8-r2
  cortex-a9
  cortex-m3
  pxa250
  pxa255
  pxa260
  pxa261
  pxa262
  pxa270-a0
  pxa270-a1
  pxa270
  pxa270-b0
  pxa270-b1
  pxa270-c0
  pxa270-c5
  sa1100
  sa1110
  ti925t

三、下載 ARM Linux Kernel

twaren 載點(version 3.X): http://ftp.twaren.net/Unix/Kernel/linux/kernel/v3.x/

先假設我們選用 linux-3.4.100.tar.xz

cd ~/qemu_image/kernel/
wget http://ftp.twaren.net/Unix/Kernel/linux/kernel/v3.x/linux-3.4.100.tar.xz
tar xfva linux-3.4.100.tar.xz
cd linux-3.4.100/

四、基本參數設定(一般 User)

注意所在目錄位置: ~/qemu_image/kernel/linux-3.4.100/
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- omap2plus_defconfig

輸出:
#
# configuration written to .config
#

五、細部設定 Menuconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig
我的設定如下:
General setup  ---> Kernel compression mode (...)  ---> XZ
System Type  ---> ARM system type (...)  ---> TI OMAP
System Type  ---> TI OMAP2/3/4 Specific Features  ---> [*] OMAP3 BEAGLE board
System Type  ---> TI OMAP2/3/4 Specific Features  ---> [*] DEVKIT8000 board
File systems  ---> <*> The Extended 4 (ext4) filesystem

########################################################
Debug 1:
當 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- menuconfig 
出現:
*** Unable to find the ncurses libraries or the
 *** required header files.
 *** 'make menuconfig' requires the ncurses libraries.
 ***
 *** Install ncurses (ncurses-devel) and try again.
 ***
make[1]: *** [scripts/kconfig/dochecklxdialog] Error 1
make: *** [menuconfig] Error

解決 1
sudo apt-get install libncurses5-dev
########################################################

六、編譯核心 uImage

time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j {core number}

########################################################
Debug 2:
若執行編譯指令,出現:
/bin/sh: 1: arm-linux-gnueabi-gcc: not found
make[2]: *** [scripts/mod/empty.o] Error 127
make[1]: *** [scripts/mod] Error 2
make[1]: *** Waiting for unfinished jobs....

解決 2:
ls -l /usr/bin/arm-linux-gnueabi-*
查看所裝的 g++, gcc, cpp 之版本,例如我的如下:
arm-linux-gnueabi-gcc-4.4
arm-linux-gnueabi-g++-4.4
arm-linux-gnueabi-cpp-4.4

接下來做 sub-link
sudo ln -s /usr/bin/arm-linux-gnueabi-gcc-4.4 /usr/bin/arm-linux-gnueabi-gcc
sudo ln -s /usr/bin/arm-linux-gnueabi-g++-4.4 /usr/bin/arm-linux-gnueabi-g++
sudo ln -s /usr/bin/arm-linux-gnueabi-cpp-4.4 /usr/bin/arm-linux-gnueabi-cpp
########################################################
Debug 3:
若執行編譯指令,出現:
"mkimage" command not found - U-Boot images will not be built
make[1]: *** [arch/arm/boot/uImage] Error 1
make: *** [uImage] Error 2

解決 3:
sudo apt-get install u-boot-tools
########################################################

編譯成功後,會出現下面訊息:
Image Name:   Linux-3.4.100
Created:      Tue Nov  4 10:18:34 2014
Image Type:   ARM Linux Kernel Image (uncompressed)
Data Size:    2533656 Bytes = 2474.27 kB = 2.42 MB
Load Address: 80008000
Entry Point:  80008000
 Image arch/arm/boot/uImage is ready

可以查看 uImage 檔案屬性:
file ~/qemu_image/kernel/linux-3.4.100/arch/arm/boot/uImage

/home/lin/qemu_image/kernel/linux-3.4.100/arch/arm/boot/uImage: u-boot legacy uImage, Linux-3.4.100, Linux/ARM, OS Kernel Image (Not compressed), 2533656 bytes, Tue Nov  4 10:18:34 2014, Load Address: 0x80008000, Entry Point: 0x80008000, Header CRC: 0x3B853179, Data CRC: 0xB98ABE41

七、編譯核心 modules

0. 注意目錄位置

cd ~/qemu_image/kernel/linux-3.4.100

1. Compile Kernel Modules

time make -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules -j ${core number}

2. Install Kernel Modules

time make -s ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- modules_install INSTALL_MOD_PATH=~/qemu_image/kernel/modules/ -j ${core number}

3. 製成壓縮檔

cd ~/qemu_image/kernel/modules
tar cfva modules-3.4.100.tar.xz lib

八、總結

1. modules-3.4.100.tar.xz 可以用來取代原始 rootfs 中的 /lib/modules 舊版驅動。

2. 參考建立虛擬 SD Card,並且做連結掛載
losetup /dev/loop0 sdcard.img
losetup -o `expr 512 \ * 2048` /dev/loop1 /dev/loop0
mount /dev/loop1 /sd1

3. 將 uImage 移入 /sd1
cp ~/qemu_image/kernel/linux-3.4.100/arch/arm/boot/uImage /sd1

要在 /sd1 裡面看到下面五個檔案:
-rwxr-xr-x 1 root root   51100 11月 18 11:57 MLO
-rwxr-xr-x 1 root root 1852516 11月 18 11:57 u-boot
-rwxr-xr-x 1 root root  392152 11月 18 11:57 u-boot.bin
-rwxr-xr-x 1 root root  392216 11月 18 11:57 u-boot.img
-rwxr-xr-x 1 root root 2533720 11月 18 11:57 uImage

4. 測試開機(參考 u-boot 編譯 指令)

qemu-system-arm -M beagle -nographic -sd sdcard.img

########################################################
Debug
開虛擬機出現下面訊息:
qemu: hardware error: no boot device found
CPU #0:
R00=00000000 R01=00000000 R02=00000000 R03=00000000
R04=00000000 R05=00000000 R06=00000000 R07=00000000
R08=00000000 R09=00000000 R10=00000000 R11=00000000
R12=00000000 R13=00000000 R14=00000000 R15=400140a4
PSR=400001d3 -Z-- A svc32
s00=00000000 s01=00000000 d00=0000000000000000
s02=00000000 s03=00000000 d01=0000000000000000
s04=00000000 s05=00000000 d02=0000000000000000
s06=00000000 s07=00000000 d03=0000000000000000
s08=00000000 s09=00000000 d04=0000000000000000
s10=00000000 s11=00000000 d05=0000000000000000
s12=00000000 s13=00000000 d06=0000000000000000
s14=00000000 s15=00000000 d07=0000000000000000
s16=00000000 s17=00000000 d08=0000000000000000
s18=00000000 s19=00000000 d09=0000000000000000
s20=00000000 s21=00000000 d10=0000000000000000
s22=00000000 s23=00000000 d11=0000000000000000
s24=00000000 s25=00000000 d12=0000000000000000
s26=00000000 s27=00000000 d13=0000000000000000
s28=00000000 s29=00000000 d14=0000000000000000
s30=00000000 s31=00000000 d15=0000000000000000
s32=00000000 s33=00000000 d16=0000000000000000
s34=00000000 s35=00000000 d17=0000000000000000
s36=00000000 s37=00000000 d18=0000000000000000
s38=00000000 s39=00000000 d19=0000000000000000
s40=00000000 s41=00000000 d20=0000000000000000
s42=00000000 s43=00000000 d21=0000000000000000
s44=00000000 s45=00000000 d22=0000000000000000
s46=00000000 s47=00000000 d23=0000000000000000
s48=00000000 s49=00000000 d24=0000000000000000
s50=00000000 s51=00000000 d25=0000000000000000
s52=00000000 s53=00000000 d26=0000000000000000
s54=00000000 s55=00000000 d27=0000000000000000
s56=00000000 s57=00000000 d28=0000000000000000
s58=00000000 s59=00000000 d29=0000000000000000
s60=00000000 s61=00000000 d30=0000000000000000
s62=00000000 s63=00000000 d31=0000000000000000
FPSCR: 00000000
已經終

解決:
fdisd sdcard.img
a
1
w

將開機選項加到 sdcard.img 第一分割區。
########################################################

九、 秘訣攻略

arm 的編譯指令有點長,我們可以利用 alias 來包裝成好記的指令。
vi ~/.bashrc
加入 alias makearm='make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi-'
source ~/.bashrc

之後就可以用自訂的指令,
設定核心:
makearm omap2plus_defconfig

核心選單:
makearm menuconfig

編譯 uImage :
time makearm uImage -j 8

編譯 modules :
time makearm modules -s -j 8

編譯 modules_install:
time makearm modules_install INSTALL_MOD_PATH=../modules/ -s -j 8




Reference: