[讨论]转个dopod699运行linux的帖子。如有更多人参与进来就好了!!!
-
- 帖子: 146
- 注册时间: 2008-04-20 8:51
[讨论]转个dopod699运行linux的帖子。如有更多人参与进来就好了!!!
本贴为O2 XDA IIi安装Linux系统的,同样适用于DOPOD 699等相同硬件配置的手机。
前段时间本想研究O2 XDA IIi的WM5或WM6 ROM,但是未果,国外站点也没有太多的资料,无意中发现国外有些论坛在讨论PPC上安装Linux系统的话题,很感兴趣。既然咱们的699现在不能刷WM5或WM6,那就再NB一点有什么不可以呢?咱们直接就玩Linux。
(也许有些DX已经实现699刷WM5或6,只是我还没看到699的相关帖子,只是知道修改XIP可以,但是没试成功,哪位知道请提供相关资料,万分感谢!)
本教程所提到的启动工具和镜像以及PPC上的Linux系统,在本帖最后提供下载。
如果想要定制编译内核,PC机上用到的Linux操作系统请自行安装或下载镜像文件在Windows下用Vmware虚拟机安装。
由于工作需要,本人使用的是RedHat Linux Server 5,其实任何一个支持U盘和可以访问互联网的Linux系统都可以,甚至是Windos系统都可以,只是编译环境和软件的问题,Windos下编译环境不成问题,只是缺少制作ext2分区和将tar.gz压缩包解压到ext2分区的软件,我相信这样的软件是一定可以找到的,只是为了方便,本人就以Linux系统为例,毕竟手机系统也是Linux,一家人说话方便嘛,至于Windows系统下操作会遇到的一些问题我们稍后再说。
按此帖中的方法在其它PPC系统上也同样可以根据实际情况安装Linux,但是如果安装在其它型号硬件系统上需要重新编译image,需要的朋友可以把手机型号发上来。有空我会把image放上。
好了,开始吧,
先来看一下我们的699配置:
网络频率:GSM/GPRS;900/1800/1900MHz
重 量 :190 克
尺寸/体积:130×69×19mm
屏幕参数:65536色TFT彩色屏幕;240×320像素,3.5英寸
操作系统:Windows Mobile 2003 Second Edition for Pocket PC
处理器:Intel PXA272 520MHz
这么强的配置怎么会没有WM5或WM6呢?大多数的理由是硬件配置的问题。
不同硬件配置的手机安装同一个Linux也是不一定可行的,应用程序上的当然没问题,但是涉及到系统启动中加载的驱动,要么选择兼容(稳定性稍差),要么选择跳过(功能缺失),否则,系统是无法启动的。
想要在其它基于Windows系统的手机上安装Linux,需要针对不同的硬件配置编译内核,对于WM系统就是要重新开发驱动。Linux也正是在这样的时候才能显示出来他开源的优势。
先说安装系统,咱们最后再说定制系统和Windows下制作系统遇到的一些问题。
1.下载启动软件:boot.zip
2.下载系统软件:system.tar.bz2
3.将系统用SPB BACKUP备份到SD卡,因为手机会硬启。
4.将SD卡备份,也就是把SD卡上所有内容复制到台式机硬盘,因为需要重新为SD卡分区。
5.找一台Linux系统的电脑,或者在Windows上安装Vmware虚拟机安装一个Linux,系统要支持U盘。
6.将SD卡插入读卡器,连接Linux,在Vmware下需要选择VM-Removable Device-USB Device。
7.为SD卡分区。当SD卡连接上以后Linux会认出USB设备,
如果系统硬盘是IDE的,SD卡应该为/dev/sda
如果硬盘时SATA的,SD卡应该为/dev/sdb
某些读卡器也许会认出有多个盘,那就执行
ls/dev/sd* -l
看看到底是哪个,如果看到/dev/sda1,/dev/sda2之类的则代表第一个分区和第二个分区。
找到SD卡所代表的设备后(此处就拿SD卡为/dev/sdb)执行
fdisk /dev/sdb
输入p回车,再次看一下磁盘信息是不是SD卡。如果不是就按q退出,以免误删分区。如果是SD卡,那就继续按以下输入为SD卡分区。
o
回车
n
回车
p
回车
1
回车
不敲任何东西
直接回车
以下为分区大小,请先看说明再输入。
+10M
回车(以上数字是本人为128M的测试卡分的第一个分区,+10M为想要为SD卡划出的第一个分区的大小,如果是2G的卡,完全可以写+1800M,Linux分区用150M足够了)
以下为创建第二个分区
n
回车
p
回车
2
回车
什么都不敲
连续按两次回车
t
回车
1
回车
6
回车
w
回车
mkdosfs空格/dev/sdb1
回车
mke2fs空格/dev/sdb2
回车
至此,分区工作已经完成并已经为SD卡的分区建立了文件系统格式。
8.接下来需要将刚才下载回来的文件解压缩到SD卡上
首先,需要将新为SD卡的分的两个区加载到系统中。
我们建立两个目录
mkdir /mnt/sdfat
mkdir /mnt/sdext2
然后将SD卡的分区加载上去。
mount –t fat /dev/sdb1 /mnt/sdfat
mount /dev/sdb2 /mnt/sdext2
tar zxvf /dev/root/Desktop/boot.zip /mnt/sdfat
tar jzxvf /dev/root/Desktop/system.tar.bz2 /mnt/sdext2
至此,手机系统已经安装成功了。
把SD卡拿下来插回手机,然后在手机上执行SD卡里的boot.exe,系统会重启,使用SD卡上的系统启动,这样就启动Linux了。
尽情感受一下吧。速度快,功能多。
附件:
1.启动软件:boot.zip http://www.infoxmarket.com/tools/boot.zip
2.系统软件:system.tar.bz2 http://www.infoxmarket.com/tools/system.tar.bz2
3.Windows系统下读取Linux分区的软件这个可以读写EXT2,EXT3分区,比较NB!下载地址 http://www.infoxmarket.com/tools/Ext2Fsd-0.45.exe
4.Linux的zImage镜像,与附件1中的大同小异,只删除一行无用代码。下载地址 http://www.infoxmarket.com/tools/zImage
说明一下:
此Linux无法使用GSM和WIFI功能,无法接打电话,无法使用WIFI上网,红外和蓝牙使用正常。系统重启时需要硬启。由于此Linux只有键盘驱动,没有699的按键驱动,所以进入Linux后,按键无法使用。
本人在699上研究此系统纯粹出于个人爱好,提升PPC的使用价值。所有信息及资源全部免费提供。
Linux下的编译方法,后边慢慢再贴。
本帖旨在抛砖引玉,欢迎感兴趣的朋友一起研究,开发GSM和WIFI功能。
本贴旨在抛砖引玉,欢迎有兴趣的朋友一起研究。
前段时间本想研究O2 XDA IIi的WM5或WM6 ROM,但是未果,国外站点也没有太多的资料,无意中发现国外有些论坛在讨论PPC上安装Linux系统的话题,很感兴趣。既然咱们的699现在不能刷WM5或WM6,那就再NB一点有什么不可以呢?咱们直接就玩Linux。
(也许有些DX已经实现699刷WM5或6,只是我还没看到699的相关帖子,只是知道修改XIP可以,但是没试成功,哪位知道请提供相关资料,万分感谢!)
本教程所提到的启动工具和镜像以及PPC上的Linux系统,在本帖最后提供下载。
如果想要定制编译内核,PC机上用到的Linux操作系统请自行安装或下载镜像文件在Windows下用Vmware虚拟机安装。
由于工作需要,本人使用的是RedHat Linux Server 5,其实任何一个支持U盘和可以访问互联网的Linux系统都可以,甚至是Windos系统都可以,只是编译环境和软件的问题,Windos下编译环境不成问题,只是缺少制作ext2分区和将tar.gz压缩包解压到ext2分区的软件,我相信这样的软件是一定可以找到的,只是为了方便,本人就以Linux系统为例,毕竟手机系统也是Linux,一家人说话方便嘛,至于Windows系统下操作会遇到的一些问题我们稍后再说。
按此帖中的方法在其它PPC系统上也同样可以根据实际情况安装Linux,但是如果安装在其它型号硬件系统上需要重新编译image,需要的朋友可以把手机型号发上来。有空我会把image放上。
好了,开始吧,
先来看一下我们的699配置:
网络频率:GSM/GPRS;900/1800/1900MHz
重 量 :190 克
尺寸/体积:130×69×19mm
屏幕参数:65536色TFT彩色屏幕;240×320像素,3.5英寸
操作系统:Windows Mobile 2003 Second Edition for Pocket PC
处理器:Intel PXA272 520MHz
这么强的配置怎么会没有WM5或WM6呢?大多数的理由是硬件配置的问题。
不同硬件配置的手机安装同一个Linux也是不一定可行的,应用程序上的当然没问题,但是涉及到系统启动中加载的驱动,要么选择兼容(稳定性稍差),要么选择跳过(功能缺失),否则,系统是无法启动的。
想要在其它基于Windows系统的手机上安装Linux,需要针对不同的硬件配置编译内核,对于WM系统就是要重新开发驱动。Linux也正是在这样的时候才能显示出来他开源的优势。
先说安装系统,咱们最后再说定制系统和Windows下制作系统遇到的一些问题。
1.下载启动软件:boot.zip
2.下载系统软件:system.tar.bz2
3.将系统用SPB BACKUP备份到SD卡,因为手机会硬启。
4.将SD卡备份,也就是把SD卡上所有内容复制到台式机硬盘,因为需要重新为SD卡分区。
5.找一台Linux系统的电脑,或者在Windows上安装Vmware虚拟机安装一个Linux,系统要支持U盘。
6.将SD卡插入读卡器,连接Linux,在Vmware下需要选择VM-Removable Device-USB Device。
7.为SD卡分区。当SD卡连接上以后Linux会认出USB设备,
如果系统硬盘是IDE的,SD卡应该为/dev/sda
如果硬盘时SATA的,SD卡应该为/dev/sdb
某些读卡器也许会认出有多个盘,那就执行
ls/dev/sd* -l
看看到底是哪个,如果看到/dev/sda1,/dev/sda2之类的则代表第一个分区和第二个分区。
找到SD卡所代表的设备后(此处就拿SD卡为/dev/sdb)执行
fdisk /dev/sdb
输入p回车,再次看一下磁盘信息是不是SD卡。如果不是就按q退出,以免误删分区。如果是SD卡,那就继续按以下输入为SD卡分区。
o
回车
n
回车
p
回车
1
回车
不敲任何东西
直接回车
以下为分区大小,请先看说明再输入。
+10M
回车(以上数字是本人为128M的测试卡分的第一个分区,+10M为想要为SD卡划出的第一个分区的大小,如果是2G的卡,完全可以写+1800M,Linux分区用150M足够了)
以下为创建第二个分区
n
回车
p
回车
2
回车
什么都不敲
连续按两次回车
t
回车
1
回车
6
回车
w
回车
mkdosfs空格/dev/sdb1
回车
mke2fs空格/dev/sdb2
回车
至此,分区工作已经完成并已经为SD卡的分区建立了文件系统格式。
8.接下来需要将刚才下载回来的文件解压缩到SD卡上
首先,需要将新为SD卡的分的两个区加载到系统中。
我们建立两个目录
mkdir /mnt/sdfat
mkdir /mnt/sdext2
然后将SD卡的分区加载上去。
mount –t fat /dev/sdb1 /mnt/sdfat
mount /dev/sdb2 /mnt/sdext2
tar zxvf /dev/root/Desktop/boot.zip /mnt/sdfat
tar jzxvf /dev/root/Desktop/system.tar.bz2 /mnt/sdext2
至此,手机系统已经安装成功了。
把SD卡拿下来插回手机,然后在手机上执行SD卡里的boot.exe,系统会重启,使用SD卡上的系统启动,这样就启动Linux了。
尽情感受一下吧。速度快,功能多。
附件:
1.启动软件:boot.zip http://www.infoxmarket.com/tools/boot.zip
2.系统软件:system.tar.bz2 http://www.infoxmarket.com/tools/system.tar.bz2
3.Windows系统下读取Linux分区的软件这个可以读写EXT2,EXT3分区,比较NB!下载地址 http://www.infoxmarket.com/tools/Ext2Fsd-0.45.exe
4.Linux的zImage镜像,与附件1中的大同小异,只删除一行无用代码。下载地址 http://www.infoxmarket.com/tools/zImage
说明一下:
此Linux无法使用GSM和WIFI功能,无法接打电话,无法使用WIFI上网,红外和蓝牙使用正常。系统重启时需要硬启。由于此Linux只有键盘驱动,没有699的按键驱动,所以进入Linux后,按键无法使用。
本人在699上研究此系统纯粹出于个人爱好,提升PPC的使用价值。所有信息及资源全部免费提供。
Linux下的编译方法,后边慢慢再贴。
本帖旨在抛砖引玉,欢迎感兴趣的朋友一起研究,开发GSM和WIFI功能。
本贴旨在抛砖引玉,欢迎有兴趣的朋友一起研究。
-
- 帖子: 146
- 注册时间: 2008-04-20 8:51
本帖照片全部是本人699安装LINUX的真实效果,并非PS,人品还没那么差。
在这里我把可以安装的机型列出来,某些机型WIFI和GSM功能可以正常使用。手头没那么多测试机,没有一一试过。
以下可安装的机型全部出自国外论坛,并非本人猜测:
696 696i 699 700 818 828 838 D900 及同配置不同名的手机如QTEK 2020i,O2 XDAIIi等。
本帖旨在抛砖引玉,希望699的机友一起来努力提升699的价值。有兴趣的朋友欢迎交流。
在这里发两个网站:
http://handhelds.org/
http://www.xda-developers.com
这些网站都有关于PPC安装LINUX的帖子,在某个贴我还曾经见到过PPC上的IPHONE,但是后来没再找到那贴,也许是插件,也许真的是IPHONE移植,希望大家看到后跟贴上图。
由于本人是699的忠实机友,但那些网站大部分并不是针对699的硬件配置,所以本人自己翻译并且实践后将心得体会写在这里。
目前版本的LINUX确实不支持GSM和WIFI,本人正在努力中。但是一个人的力量永远是渺小的,希望广大LINUX爱好着一同努力,这并不是为了699,而是为了所有的PPC,所以我们的努力都是值得的。
http://www.infoxmarket.com
699的LINUX从功能上来讲和WINDOWS的差不多,但是软件比WINDOWS少得多。
699的LINUX从速度上来说比WINDOWS快一些,个人感受,只是打开一个2M的WORD文档试验了一下而已。
其实装LINUX并不会比699现有的系统有什么本质飞跃。只是换一种操作风格而已,感受一下LINUX下的软件设计,增长一下LINUX的知识,我更看重的是在LINUX下的开源,很多软件可以自己定制。
不需要刷机,但是要给机器做好备份,因为有可能会硬启。
这个系统是装在卡上的,然后用引导程序引导启动。
无论出现任何问题,硬启一下就行了。
LINUX 多普达699的GSM驱动源代码
/*
* GSM driver for HTC Alpine
*
* Copyright (C) 2006, Philipp Zabel
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive for
* more details.
*/
#include <linux/module.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/arch/hardware.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/serial.h>
int suspending;
/* FIXME: asic5 needs its own driver */
extern void htcalpine_cpld_egpio_set_value(int gpio, int val);
void *asic5_map;
void asic5_egpio_set_value(int gpio, int val) {
int bits = 1<<gpio;
static int egpio;
printk ("asic5_egpio_set_value(%d, %d)\n", gpio, val);
if (val)
egpio |= bits;
else
egpio &= ~bits;
__raw_writew(egpio & 0xffff, asic5_map+0x0);
__raw_writew(egpio>>16, asic5_map+0x2);
}
void asic5_phone_on(void)
{
printk ("asic5_phone_on\n");
__raw_writew((__raw_readw(asic5_map+0x28) | 0x3), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) | 0x1), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0xc), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) & 0xfffd), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0x30), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) | 0x4), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0xc0), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) & 0xfff7), asic5_map+0x04);
}
static void alpine_gsm_reset(void)
{
printk ("GSM Reset\n");
GPSR(36) = GPIO_bit(36);
pxa_gpio_mode(36 | GPIO_OUT);
pxa_gpio_mode (10 | GPIO_IN);
pxa_gpio_mode (108 | GPIO_IN);
asic5_egpio_set_value(0, 0); /* DTR? */
asic5_egpio_set_value(11, 0); /* magician: pxa gpio 11 */
GPCR(87) = GPIO_bit(87);
/* stop display to avoid interference? */
GPCR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
htcalpine_cpld_egpio_set_value(15, 1); /* GSM_POWER */
asic5_egpio_set_value(22, 1); /* ?? */
msleep (150);
GPSR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
msleep (150);
GPCR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
asic5_egpio_set_value(11, 1);
/* FIXME: disable+reenable 86, is this OK? */
GPCR(86) = GPIO_bit(86); // ??
GPSR(86) = GPIO_bit(86); // GSM_RESET
asic5_egpio_set_value(9, 1); /* magician: pxa gpio 26 */
msleep(150);
GPCR(86) = GPIO_bit(86);
msleep(10);
pxa_gpio_mode(36 | GPIO36_FFDCD_MD); /* or just GPIO_IN? */
asic5_phone_on();
}
void alpine_gsm_off(void)
{
printk ("GSM Off\n");
htcalpine_cpld_egpio_set_value(1<<15, 0); /* GSM_POWER */
}
static void alpine_phone_configure (int state)
{
switch (state) {
case PXA_UART_CFG_PRE_STARTUP:
printk( KERN_NOTICE "alpine configure phone: PRE_STARTUP\n");
if (!suspending)
alpine_gsm_reset();
asic5_egpio_set_value(1<<11,0); /* ready to talk */
break;
case PXA_UART_CFG_POST_STARTUP:
printk( KERN_NOTICE "alpine configure phone: POST_STARTUP\n");
break;
case PXA_UART_CFG_PRE_SHUTDOWN:
printk( KERN_NOTICE "alpine configure phone: PRE_SHUTDOWN\n");
if (suspending)
asic5_egpio_set_value(1<<11, 1); /* shut up, please */
else
alpine_gsm_off();
break;
default:
break;
}
}
static void alpine_phone_suspend (struct platform_device *dev, pm_message_t state)
{
suspending = 0 /* should be 1, but we need CPLD irq support first, anyway */;
// return 0;
}
static void alpine_phone_resume (struct platform_device *dev)
{
suspending = 0;
// return 0;
}
struct alpine_phone_funcs {
void (*configure) (int state);
void (*suspend) (struct platform_device *dev, pm_message_t state);
void (*resume) (struct platform_device *dev);
};
static int alpine_phone_probe (struct platform_device *dev)
{
struct alpine_phone_funcs *funcs = (struct alpine_phone_funcs *) dev->dev.platform_data;
printk ("alpine_phone_probe\n");
asic5_map = ioremap (PXA_CS1_PHYS + 0x02000000, 0x1000);
/* configure phone UART */
funcs->configure = alpine_phone_configure;
funcs->suspend = alpine_phone_suspend;
funcs->resume = alpine_phone_resume;
return 0;
}
static int alpine_phone_remove (struct platform_device *dev)
{
struct alpine_phone_funcs *funcs = (struct alpine_phone_funcs *) dev->dev.platform_data;
iounmap(asic5_map);
funcs->configure = NULL;
funcs->suspend = NULL;
funcs->resume = NULL;
return 0;
}
static struct platform_driver phone_driver = {
.probe = alpine_phone_probe,
.remove = alpine_phone_remove,
.driver = {
.name = "htcalpine-phone",
},
};
static __init int alpine_phone_init(void)
{
if (!machine_is_htcalpine())
return -ENODEV;
printk(KERN_NOTICE "alpine Phone Driver\n");
return platform_driver_register(&phone_driver);
}
static __exit void alpine_phone_exit(void)
{
platform_driver_unregister(&phone_driver);
}
module_init(alpine_phone_init);
module_exit(alpine_phone_exit);
MODULE_AUTHOR("Philipp Zabel");
MODULE_DESCRIPTION("HTC Alpine GSM driver");
MODULE_LICENSE("GPL");
GSM已经调好了可以打电话,短信还没顾上研究,目前有待解决的问题还有
1、进入LINUX系统后一直没办法关机,每次都得拔电硬启,很郁闷,正在努力。。。
2、无线和红外还不能用,少了两个很强大的功能,正在努力。。。
3、蓝牙虽然能发现硬件,可是没法正常使用,正在努力。。。
这个LINUX系统经过测试发现很好用,执行起来速度也挺快。现在可能有新版本了,没时间上网,前边提供过几个网站,有兴趣的去看看吧。
奥运期间估计会比较忙,更没时间研究了。慢慢来吧,有兴趣的顶起来!!!
在这里我把可以安装的机型列出来,某些机型WIFI和GSM功能可以正常使用。手头没那么多测试机,没有一一试过。
以下可安装的机型全部出自国外论坛,并非本人猜测:
696 696i 699 700 818 828 838 D900 及同配置不同名的手机如QTEK 2020i,O2 XDAIIi等。
本帖旨在抛砖引玉,希望699的机友一起来努力提升699的价值。有兴趣的朋友欢迎交流。
在这里发两个网站:
http://handhelds.org/
http://www.xda-developers.com
这些网站都有关于PPC安装LINUX的帖子,在某个贴我还曾经见到过PPC上的IPHONE,但是后来没再找到那贴,也许是插件,也许真的是IPHONE移植,希望大家看到后跟贴上图。
由于本人是699的忠实机友,但那些网站大部分并不是针对699的硬件配置,所以本人自己翻译并且实践后将心得体会写在这里。
目前版本的LINUX确实不支持GSM和WIFI,本人正在努力中。但是一个人的力量永远是渺小的,希望广大LINUX爱好着一同努力,这并不是为了699,而是为了所有的PPC,所以我们的努力都是值得的。
http://www.infoxmarket.com
699的LINUX从功能上来讲和WINDOWS的差不多,但是软件比WINDOWS少得多。
699的LINUX从速度上来说比WINDOWS快一些,个人感受,只是打开一个2M的WORD文档试验了一下而已。
其实装LINUX并不会比699现有的系统有什么本质飞跃。只是换一种操作风格而已,感受一下LINUX下的软件设计,增长一下LINUX的知识,我更看重的是在LINUX下的开源,很多软件可以自己定制。
不需要刷机,但是要给机器做好备份,因为有可能会硬启。
这个系统是装在卡上的,然后用引导程序引导启动。
无论出现任何问题,硬启一下就行了。
LINUX 多普达699的GSM驱动源代码
/*
* GSM driver for HTC Alpine
*
* Copyright (C) 2006, Philipp Zabel
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file COPYING in the main directory of this archive for
* more details.
*/
#include <linux/module.h>
#include <linux/err.h>
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <asm/io.h>
#include <asm/mach-types.h>
#include <asm/arch/hardware.h>
#include <asm/arch/pxa-regs.h>
#include <asm/arch/serial.h>
int suspending;
/* FIXME: asic5 needs its own driver */
extern void htcalpine_cpld_egpio_set_value(int gpio, int val);
void *asic5_map;
void asic5_egpio_set_value(int gpio, int val) {
int bits = 1<<gpio;
static int egpio;
printk ("asic5_egpio_set_value(%d, %d)\n", gpio, val);
if (val)
egpio |= bits;
else
egpio &= ~bits;
__raw_writew(egpio & 0xffff, asic5_map+0x0);
__raw_writew(egpio>>16, asic5_map+0x2);
}
void asic5_phone_on(void)
{
printk ("asic5_phone_on\n");
__raw_writew((__raw_readw(asic5_map+0x28) | 0x3), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) | 0x1), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0xc), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) & 0xfffd), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0x30), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) | 0x4), asic5_map+0x04);
__raw_writew((__raw_readw(asic5_map+0x28) | 0xc0), asic5_map+0x28);
__raw_writew((__raw_readw(asic5_map+0x04) & 0xfff7), asic5_map+0x04);
}
static void alpine_gsm_reset(void)
{
printk ("GSM Reset\n");
GPSR(36) = GPIO_bit(36);
pxa_gpio_mode(36 | GPIO_OUT);
pxa_gpio_mode (10 | GPIO_IN);
pxa_gpio_mode (108 | GPIO_IN);
asic5_egpio_set_value(0, 0); /* DTR? */
asic5_egpio_set_value(11, 0); /* magician: pxa gpio 11 */
GPCR(87) = GPIO_bit(87);
/* stop display to avoid interference? */
GPCR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
htcalpine_cpld_egpio_set_value(15, 1); /* GSM_POWER */
asic5_egpio_set_value(22, 1); /* ?? */
msleep (150);
GPSR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
msleep (150);
GPCR(GPIO74_LCD_FCLK) = GPIO_bit(GPIO74_LCD_FCLK);
asic5_egpio_set_value(11, 1);
/* FIXME: disable+reenable 86, is this OK? */
GPCR(86) = GPIO_bit(86); // ??
GPSR(86) = GPIO_bit(86); // GSM_RESET
asic5_egpio_set_value(9, 1); /* magician: pxa gpio 26 */
msleep(150);
GPCR(86) = GPIO_bit(86);
msleep(10);
pxa_gpio_mode(36 | GPIO36_FFDCD_MD); /* or just GPIO_IN? */
asic5_phone_on();
}
void alpine_gsm_off(void)
{
printk ("GSM Off\n");
htcalpine_cpld_egpio_set_value(1<<15, 0); /* GSM_POWER */
}
static void alpine_phone_configure (int state)
{
switch (state) {
case PXA_UART_CFG_PRE_STARTUP:
printk( KERN_NOTICE "alpine configure phone: PRE_STARTUP\n");
if (!suspending)
alpine_gsm_reset();
asic5_egpio_set_value(1<<11,0); /* ready to talk */
break;
case PXA_UART_CFG_POST_STARTUP:
printk( KERN_NOTICE "alpine configure phone: POST_STARTUP\n");
break;
case PXA_UART_CFG_PRE_SHUTDOWN:
printk( KERN_NOTICE "alpine configure phone: PRE_SHUTDOWN\n");
if (suspending)
asic5_egpio_set_value(1<<11, 1); /* shut up, please */
else
alpine_gsm_off();
break;
default:
break;
}
}
static void alpine_phone_suspend (struct platform_device *dev, pm_message_t state)
{
suspending = 0 /* should be 1, but we need CPLD irq support first, anyway */;
// return 0;
}
static void alpine_phone_resume (struct platform_device *dev)
{
suspending = 0;
// return 0;
}
struct alpine_phone_funcs {
void (*configure) (int state);
void (*suspend) (struct platform_device *dev, pm_message_t state);
void (*resume) (struct platform_device *dev);
};
static int alpine_phone_probe (struct platform_device *dev)
{
struct alpine_phone_funcs *funcs = (struct alpine_phone_funcs *) dev->dev.platform_data;
printk ("alpine_phone_probe\n");
asic5_map = ioremap (PXA_CS1_PHYS + 0x02000000, 0x1000);
/* configure phone UART */
funcs->configure = alpine_phone_configure;
funcs->suspend = alpine_phone_suspend;
funcs->resume = alpine_phone_resume;
return 0;
}
static int alpine_phone_remove (struct platform_device *dev)
{
struct alpine_phone_funcs *funcs = (struct alpine_phone_funcs *) dev->dev.platform_data;
iounmap(asic5_map);
funcs->configure = NULL;
funcs->suspend = NULL;
funcs->resume = NULL;
return 0;
}
static struct platform_driver phone_driver = {
.probe = alpine_phone_probe,
.remove = alpine_phone_remove,
.driver = {
.name = "htcalpine-phone",
},
};
static __init int alpine_phone_init(void)
{
if (!machine_is_htcalpine())
return -ENODEV;
printk(KERN_NOTICE "alpine Phone Driver\n");
return platform_driver_register(&phone_driver);
}
static __exit void alpine_phone_exit(void)
{
platform_driver_unregister(&phone_driver);
}
module_init(alpine_phone_init);
module_exit(alpine_phone_exit);
MODULE_AUTHOR("Philipp Zabel");
MODULE_DESCRIPTION("HTC Alpine GSM driver");
MODULE_LICENSE("GPL");
GSM已经调好了可以打电话,短信还没顾上研究,目前有待解决的问题还有
1、进入LINUX系统后一直没办法关机,每次都得拔电硬启,很郁闷,正在努力。。。
2、无线和红外还不能用,少了两个很强大的功能,正在努力。。。
3、蓝牙虽然能发现硬件,可是没法正常使用,正在努力。。。
这个LINUX系统经过测试发现很好用,执行起来速度也挺快。现在可能有新版本了,没时间上网,前边提供过几个网站,有兴趣的去看看吧。
奥运期间估计会比较忙,更没时间研究了。慢慢来吧,有兴趣的顶起来!!!
-
- 帖子: 24
- 注册时间: 2008-08-13 16:10
- 来自: 广东
- 联系:
- cs772421
- 帖子: 172
- 注册时间: 2008-08-01 7:29
- 联系:
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
-
- 帖子: 24
- 注册时间: 2008-08-13 16:10
- 来自: 广东
- 联系:
-
- 帖子: 13
- 注册时间: 2008-08-18 0:45
-
- 帖子: 32
- 注册时间: 2008-03-23 9:28
-
- 帖子: 262
- 注册时间: 2008-09-12 12:32
Re: [讨论]转个dopod699运行linux的帖子。如有更多人参与进来就好了!!!
真不错,顶LZ!
我现在用的黑莓8800,用着还好,不过做为一个 Linux爱好者, 想尝试下。不知道可不可以试下类似的方法?
我现在用的黑莓8800,用着还好,不过做为一个 Linux爱好者, 想尝试下。不知道可不可以试下类似的方法?