(转)定制你的Joggler

为什么需要定制:
1.这是伟大的开源时代赋予你的权利,行使你的权利就是你的义务
2.O2官方系统功能过于简单,这对于1.3GHz的超线程CPU很不公平
3.Ubuntu系列的系统功能很全,但庞大,我们不应该为用不到的程序而浪费存储空间;而且操作基本要借助于鼠标和键盘,触摸屏形同虚设
4.我们需要一个能替代原系统的系统,而不是还要带个尾巴(U盘)

下面是主要的工作列表:
1.使用自制的grub.efi,原因有2个
a). 原二进制版本没有解决屏幕显示的问题,需要通过refit来引导
b). 原二进制版本禁止掉了grub的命令行接口,里面的很多命令是很有帮助的
2.使用自制的linux kernel,这里有2个选择
a). 使用Android的kernel,版本为2.6.32.1
b). 使用Arch linux的kernel,版本为2.6.33.4
3.根文件系统使用Debian 5.0.4(lenny),整个基系统安装完不到500MB,而ubuntu_9.10_remix要2.1GB。
4.GUI仍然使用O2的Flash前端

1. 编译grub.efi
grub的最新版本是1.98,官方下载地址如下:
ftp://alpha.gnu.org/gnu/grub/
输入:
grub-1.98.tar.gz
grub-gop-video-v1.patch
输出:
grub.efi
编译步骤:
tar zxvf ../grub-1.98.tar.gz
cd grub-1.98
patch -p1 < /home/jerry/Joggler/grub-gop-video-v1.patch
./configure –with-platform=efi –disable-werror
make
./grub-mkimage -d . -o grub.efi part_msdos hfsplus fat ext2 normal sh chain boot configfile linux minicmd
注意的问题:
1). 需要使用X86的Linux环境来编译,AMD编译的程序无法运行(也可以在./configure的时候加上–target=x86来绕过)
root@jerry-desktop:/home/jerry/Joggler/grub/grub-1.98# file grub.efi
grub.efi: PE32 executable (EFI application) Intel 80386 32-bit                <— X86
root@jerry-desktop:/home/jerry/Joggler/grub-1.98# file grub.efi
grub.efi: PE32+ executable (EFI application)                                <— AMD
这样运行起来的错误提示:
——————————————————————
Error: Unsupported while loading grub.efi

* Hit any key to continue *
——————————————————————
2). part_msdos标准教程里写的是part_gpt,这个选项编译出来grub无法识别U盘上的分区
3). minicmd这个就是grub的命令行模块
4). grub-gop-video-v1.patch这个补丁修正了grub在屏幕上的显示

测试:
将编译生成的grub.efi放在U盘的第一个分区(vfat) /efi/grub/ 下
grub.conf要和grub.efi在同一个目录
set timeout=5

menuentry “Debian lenny” {
set root=(hd0,1)
linux /images/vmlinuz-2.6.33.4-1 root=/dev/sda2 ro acpi=force idle=halt
initrd /images/initrd-Debian504
}

/boot.nsh修改成:
fs1:
cd \efi\grub
grub

这样上电直接进入grub界面

可以在多个环境上进行切换

Grub的命令行接口

参考资料:
http://grub.enbug.org/TestingOnMacbook
http://jogglerhacks.blogspot.com/2010/04/grub2-on-joggler.html

2. 编译Linux Kernel
Android版本的2.6.32.1下载方法见下面URL
http://www.jogglerwiki.info/index.php?title=Build_Android_Image
Android-X86 for Joggler整个包有2GB大,下了2天才下完,所以还是建议用2.6.33.4
下载地址:
http://aur.archlinux.org/packages.php?ID=36949

输入:
linux-2.6.33.4.tar.bz2
joggler-backlight-2.6.32-v1.patch
joggler-i2c-fix-2.6.32-v1.patch
joggler-sound-fix-2.6.32-v2.patch
linux-2.6.33.2-iegd.patch

输出:
vmlinuz-2.6.33.4
2.6.33.4-joggler_modules.tar.bz2

编译过程:
tar jxvf linux-2.6.33.4.tar.bz2
cd linux-2.6.33.4
patch -p1 < ../joggler-backlight-2.6.32-v1.patch
patch -p1 < ../joggler-i2c-fix-2.6.32-v1.patch
patch -p1 < ../joggler-sound-fix-2.6.32-v2.patch
patch -p1 < ../linux-2.6.33.2-iegd.patch
cp ../joggler-kernel.config ./.config
make menuconfig
make bzImage
make modules
make modules_install
cd ./arch/x86/boot
cp bzImage vmlinuz-2.6.33.4
cd /lib/modules/
tar cjvf 2.6.33.4-joggler_modules.tar.bz2 ./2.6.33.4-joggler/*
参考资料:
http://www.jogglerwiki.info/index.php?title=Arch_Linux

3.获得根文件系统
输入:
debian-504-i386-netinst.iso
输出:
debian-504-Joggler-rootfs.tar.bz2
initrd-Debian504
制作方法是通过VMWare来安装debian-504-i386-netinst.iso
1). 基系统安装完成就结束,不要安装桌面和服务器环境。
2). apt-get install xorg-core wine ssh vnc4server alsa-utils wireless-tools
3). 通过wine安装BitComet
4). 关闭虚拟机
5). 将生成的虚拟机硬盘文件×.vmdk挂接在另一个虚拟机上,mount后将boot目录下的initrd复制出来,将整个根目录打包,得到上面提到的2个输出文件。
注:wine和BitComet为可选,随便装你需要的软件。(不重要的东西可以等到Joggler的环境来安装)

4.将空闲的U盘或移动硬盘格式化,第一个fat32,第二个ext2
1). 将grub,initrd-Debian504,vmlinuz-2.6.33.4放入第一个分区
2). 将debian-504-Joggler-rootfs.tar.bz2解压缩到第二个分区
3). 将p2/lib/modules/下的文件全部删除(可选,只为节省空间),用2.6.33.4-joggler_modules.tar.bz2解压缩替换
4). 将p2/var/cache/apt/archives/下面的文件删除(可选,只为节省空间)
5). 修改p2/etc/fstab,注释掉那些不需要挂接的设备节点
6). 修改p2/etc/X11/xorg.conf (这个有点麻烦,上个附件好了)
7). umount掉p1和p2,插入Joggler上电

补充说明:
1. 如何配置xorg.conf让xwindows工作(液晶屏,键盘,鼠标,触摸屏)
告诉XWindows存在的设备有,屏幕、鼠标、键盘、触摸屏
Section “ServerLayout”
Identifier     “X.org Configured”
Screen      0  “Screen0” 0 0
InputDevice    “Touchscreen” “CorePoniter”
InputDevice    “Mouse”
InputDevice    “Keyboard0” “CoreKeyboard”
EndSection
键盘:
Section “InputDevice”
Identifier  “Keyboard0”
Driver      “kbd”
EndSection
鼠标:
Section “InputDevice”
Identifier  “Mouse”
Driver      “mouse”
Option      “Protocol” “Auto”
#       Option      “ZAxisMapping” “4” “5”
#       Option      “CorePointer”
Option      “Device” “/dev/input/mice”
EndSection
触摸屏:
Section “InputDevice”
Identifier  “Touchscreen”
Driver      “evdev”
#       Driver      “evtouch”
Option      “Device” “/dev/input/event1”
EndSection
屏幕:
Section “Screen”
Identifier “Screen0”
Device     “Card0”
Monitor    “Monitor0”
SubSection “Display”
Viewport   0 0
Depth     24
EndSubSection
EndSection
其中用到的Card0描述:(这里用的是fbdev是比较慢的驱动)
Section “Device”
#Option     “ShadowFB”                  # [<bool>]
#Option     “Rotate”                    # <str>
#Option     “fbdev”                     # <str>
#Option     “debug”                     # [<bool>]
Identifier  “Card0”
Driver      “fbdev”
VendorName  “Intel Corporation”
BoardName   “System Controller Hub (SCH Poulsbo) Graphics Controller”
BusID       “PCI:0:2:0″
EndSection
这部分参考http://www.jogglerwiki.info/index.php?title=Arch_Linux中xorg配置的描述

2. 如何让无线网络工作
第一次需要手动加载模块rt2870sta
Joggler:/home/joggler# insmod /lib/modules/2.6.33.4-joggler/kernel/drivers/staging/rt2870/rt2870sta.ko
然后通过lsmod检查是否加载成功
通过命令ifconfig -a,检查是否多出了一个网络接口
我看到的是
wlan0     Link encap:Ethernet  HWaddr 00:00:00:00:00:00
使能网卡
Joggler:/home/joggler# ifconfig wlan0 up
检查无线信号
Joggler:/home/joggler# iwlist wlan0 scan
wlan0     Scan completed :
Cell 01 – Address: 00:0F:66:43:C4:41
Protocol:802.11b/g
ESSID:”jerry’s home”
Mode:Managed
Channel:6
Quality:100/100  Signal level:-41 dBm  Noise level:-71 dBm
Encryption key:off
Bit Rates:54 Mb/s
Cell 02 – Address: D8:5D:4C:2D:9D:D2
Protocol:802.11b/g
ESSID:”coship-hz1″
Mode:Managed
Channel:11
Quality:39/100  Signal level:-74 dBm  Noise level:-71 dBm
Encryption key:off
Bit Rates:36 Mb/s
Cell 03 – Address: 00:EE:07:01:DC:57
Protocol:802.11b/g
ESSID:”ALPHA-WLAN”
Mode:Managed
Channel:11
Quality:39/100  Signal level:-74 dBm  Noise level:-71 dBm
Encryption key:on
Bit Rates:18 Mb/s
IE: WPA Version 1
Group Cipher : TKIP
Pairwise Ciphers (1) : TKIP
Authentication Suites (1) : PSK
启用essid并设置为”jerry’s home”
Joggler:/home/joggler# iwconfig wlan0 essid on
Joggler:/home/joggler# iwconfig wlan0 essid “jerry’s home”

3. 如何让声卡工作
运行alsaconf,选择列表中的Intel Corporation System Controller Hub (SCH Poulsbo) HD Audio


测试
因为aplay只能播放wave格式,而madplay又不能通过alsa来播放,所以使用下面的命令组合
madplay -o wave:- /media/media/01.mp3 | aplay

4. 如何将最终版本放入NAND Flash

存在的问题:
1. 声卡还是无法工作
2. 需要写一个脚本来完成wifi等配置工作

这个是原始的xorg-core的启动界面


BT的话需要NAS的支持,或者要外挂一个硬盘

 

这个可以做到多系统启动,不知道grub启动的时候支不支持触摸屏,支持的话,就不用写切换程序。

发表回复