2009年4月20日 星期一

Porting the atmel 9261EK uses linux-2.6.25 android kernel by eabi tool chain

首先 我先到Atmel for linux 網站去下載linux 2.6.25的kernel 和 patch
下載完後,至Android的網站下載android的kernel。

首先將9261的kernel做Patch
zcat 2.6.xx-at91.patch.gz | patch -p1
make ARCH=arm at91sam9261ek_defconfig
make ARCH=arm menuconfig

接著開啟另外一個終端機,進入android的kernel
先修改Makefile 指定ARCH=arm 和 CROSS Complier為 eabi的tool chain
然後 make menuconfig
接著照著 9261的kernel menuconfig去對照做config

Notice:
Frame buffer:

Device Drivers →
Graphics support →
<*> Support for frame buffer devices
[*] Enable Video Mode Handling Helpers
[*] Enable Tile Blitting Support
<*> AT91/AT32 LCD Controller support
[*] Frame Buffer in internal SRAM
Console display driver support →
<*> Frambuffer Console support
[*] Frambuffer Console Rotation
[*] Select compiled-in fonts
[*] VGA 8x8 font
[*] VGA 8x16 font
[*] Mac console 6x11 font (not supported by all dirvers)
[*] console 7x14 font (not supported by all drivers
[*] Pearl (old m68k) console 8x8 font
[*] Acorn console 8x8 font
[*] Mini 4x6 font
[*] Sparc console 8x16 font
[*] sparc console 12x12 font (not supported by all drivers)
[*] console 10x18 font (not supported by all drivers)
Logo configuration →
[*] Bootup logo
[*] Standard black and white Linux logo
[*] Standard 16-color Linux logo
[*] Standard 224-color Linux logo


接著丟到版子上面跑
可能出現下面error:
Error: unrecognized/unsupported machine ID (r1 = 0x*****)
解決的方法有兩種:

方法一
Linux Kernel 啟動時出現 bad machine ID,原因大致是u-boot傳遞給Kernel的machine ID 錯誤,所以我們可以用手動在Kernel Source Code 內添加 ID.

在9261中的 boot_params =PHYS_SRAM+0x100 而 PHYS_SRAM 又為0X20000000,
可以在U-BOOT的Source code 找到上面資訊
在 arch/arm/tools/mach-types可以找到 9261的machine ID為 848(十進制)

接著修改kernel的arch/arm/kernel/head.S,直接將ID 參數賦予給Kernel,
# vi arch/arm/kernel/head.S
----------------------------------------------
__INIT
.type stext, %function
ENTRY(stext)
/********* add here *********/
mov r0, #0
mov r1, #0x350 // machine ID 0x350 =848
ldr r2, =0x20000100 //
boot_params address
/********* end add *********/
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode
@ and irqs disabled


方法二
==================================================
修改u-boot,填寫ID


# vi common/cmd_boot.c
----------------------------------------------
31 #if defined(CONFIG_I386)
32 DECLARE_GLOBAL_DATA_PTR;
33 #endif
====>
31 //#if defined(CONFIG_I386)
32 DECLARE_GLOBAL_DATA_PTR;
33 //#endif
...
60 #if !defined(CONFIG_NIOS)
/************** add here ******************/
if(argc==2)
rc = ((ulong (*)(int, char *[]))addr) (0, gd->bd->bi_arch_number);
else

/*************** add end *****************/

61 rc = ((ulong (*)(int, char *[]))addr) (--argc, &argv[1]);
62 #else
63 /*
64 * Nios function pointers are address >> 1
65 */
66 rc = ((ulong (*)(int, char *[]))(addr>>1)) (--argc, &argv[1]);
67 #endif



2009年4月18日 星期六

Moblin2 Setting up development environment

Host端環境架設

下載相關開發編譯用Package

$sudo apt-get install vim libcurses5-dev git-core libtools 
 

為了要使用MIC2套件工具,我們必須先確定相關的Package已經在我們開發系統上available,如下套件

  • yum
  • rpm
  • kpartx
  • kparted
  • syslinux
  • isomd5sum
  • kvm
  • zlib-devel(for compiling)
  • python-devel(for compiling)

而相關的modules也是必須先設定安裝好的,

  • squashfs
  • dm_snapshot
  • loop

而對於不同的Linux系統提供者也有特定的Package需求,

Specific packages for Fedora and Moblin:

  • pykickstart
  • device-mapper

Specific packages for Ubuntu 8.10:

  • python-celementtree
  • python-elementtree
  • dmsetup


下面是針對於Ubuntu8.10上使用MIC2套件,所需要使用到的PackagesModules(MIC2 無法於Ubuntu8.04上使用)

$sudo apt-get install zlib1g-dev yum kpartx syslinux rpm isomd5sum kvm

$sudo apt-get install python-dev python-elementree

$sudo apt-get install squashfs-tools dmsetup python-celementree



Git介紹:

Git為版本控制工具或軟體配置管理套件,最初是專門針對Linux內核開發所撰寫的,與常用的版本控制工具CVSSubversion等不同,它採用了分布是版本庫的方式,不必Server端軟體的支持,使原始碼的發布和交流變的相當方便。Git的速度相當快,對於如Linux Kernel這樣的大項目的開發來說就變的相當重要,Git 最為出色的是他的合併和比對能力(merge tracing),它可以自動比對Client端與Server端的資料是否不同,而決定是否更新其中的資料,而不需全部在重新下載下來。

首先建立一個git專用的資料夾,

$sudo mkdir moblin


接著將Moblin-Image-Creator-2 Moblin Git Server端的Source code download下來,即可完成下載的動作。

$cd moblin

$git clone git://git.moblin.org/moblin-image-creator-2

$cd moblin-image-creator-2


我們可以進去剛剛下載下來的檔案資料夾,並對其作修改、編譯等等動作。接著安裝MIC2工具於系統上,

$make clean
$make
$sudo make install


由於Moblin的工具與套件一直持續的在更新與維護,所以會經常有新的套件或者較新的版本於Server上發布,我們可以在得知Server端有了更新的版本後,對我們Client端系統下來做更新的動作,

$git pull


在成功安裝MIC2工具後,接著來使用MIC2工具創建一個Netbook的映像檔,在MIC2創建一個映像檔,是透過讀取一個kickstart的檔案,kickstart是一個相當有名的檔案格式,在RedhatFedora等會使用到kickstart來安裝系統。



Kickstart介紹:

kickstart發展原本是便於安裝多台相同電腦時,所使用的一種自動安裝設定檔,例如於電腦教室、Linux叢集系統,一次得安裝多台Linux的需求,如果一台一台慢慢的透過光碟或者USB安裝,是相當費時的。為了改進作業方式,Red Hat發展出kickstart的安裝放式,藉由使用kickstart,系統管理員只需要建立一個自動安裝設定檔(ksname.cfg),其中會含有Red Hat Linux於安裝過程中所需要給予設定的所有設定值,如此一來所有系統即根據這個檔案來完成安裝工作。

而在一開始,examples資料夾底下有兩個範例設定檔

  • netbook-core.ks 是給直接用戶使用(End User)
  • netbook-core-developer.ks 是給開發者使用的。

建立一個映像檔可以使用下列的命令格式

$sudo moblin-image-creator -c netbook-core.ks -f livecd --cache=/tmp/mycache

  • -c

為用來指定kickstart檔案的位置與名稱。

  • --cache

為指定暫存資料夾,主要是用來儲存我們從server端所下載下來的Package,而當我們要再另外做另一個映像檔的時候,可以指定此路徑來達到減少下載而更有效率開發,而且mic會自動偵測Package是否需要updated,這樣可以更有效率的去開發。

  • -f

為用來指定所要輸出的Image格式,其支援包含

  1. Live Hybrid ISO Images
  2. Live USB Images
  3. Loop images
  4. Raw Images (KVM images)
  5. VMDK image



接著下面有幾種形式映像檔可以透過MIC2來創建:

Creating Live CD Images

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=livecd --cache=mycache

在輸入命令完後,即會製作一Live CD映像檔,其檔案名稱為moblin-netbook-core-XX.iso,這個ISO映像檔可以直接透過映像檔燒錄精靈來燒錄到CD上,如使用酒精120%燒錄工具。

若想要將此映像檔透過USB來使用的話,可以透過下面命令列來達到功能,

$sudo dd if=moblin-netbook-core-XX.iso of=/dev/sdb

(假設其USB mount/dev/sdb)

Creating Live USB Images

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=liveusb --cache=mycache

在輸入命令完後,即會製作一Live USB映像檔,其檔案名稱為moblin-netbook-core-XX. usbimg,將此映像檔透過USB來使用的話,可以透過下面命令列來達到功能,

$sudo dd if=moblin-netbook-core-XX.usbimg of=/dev/sdb

(假設其USB mount/dev/sdb)

此映像檔格式為FAT檔案系統,所以我們可以直接將其於Windows或者其他作業系統上開啟。

Creating Live USB Images Interactively

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=liveusb --interactive --cache=mycache

此命令會直接建立一USB映像檔,並且直接會寫入到系統上可用的或適合的USB裝置上。

Creating Loop Image

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=loop --cache=/tmp/mycache

在輸入命令完後,即會製作一Loop映像檔,其檔案名稱為moblin-netbook-core-XX.img,而此映像檔可以直接mount到系統上,並且透過chroot來對其作修改,可以透過下面命令列來達到功能,

$sudo mount -o loop moblin-netbook-core-XX.img /mnt
$sudo chroot /mnt su –

Creating KVM and Raw Image

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=raw --cache=/tmp/mycache

在輸入命令完後,會有一資料夾名稱為moblin-netbook-core-XXmoblin-netbook-core-XX-sda.raw映像檔,而我們可以直接透過下面命令來使用此映像檔。

Fedora 或者 Opensuse系統為執行下面命令來使用此映像檔到KVM虛擬映像檔工具:

$sudo qemu-kvm -m 512 -boot c -hda moblin-netbook-core-XX-sda.raw

Ubuntu系統為使用下面命令:

$sudo kvm -m 512 -boot c -hda moblin-netbook-core-XX-sda.raw

Creating Vmware Images (VMDK)

執行下列命令:

$sudo moblin-image-creator --config=netbook-core.ks --format=vmdk --cache=mycache

在輸入命令完後,會有一資料夾名稱為moblin-netbook-XXmoblin-netbook-core-XX-sda.vmd映像檔,而我們可以直接透過VMWare工具來使用此映像檔。