为什么需要定制:
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的支持,或者要外挂一个硬盘