《系统程序员成长计划》@DouBan:
By 李先静 1,900 views
《系统程序员成长计划》@DouBan: http://book.douban.com/subject/4722708/ 欢迎评论。
嵌入式GUI FTK设计与实现-显示设备(FtkDisplay)
By 李先静 536 views
对于GUI来说,输入设备(如键盘和鼠标)和显示设备 (如LCD)都是与硬件相关的。在前面关于《事件源(FtkSource)》的一节中,我们看到了FtkSource很好的抽象了输入设备,让FTK独立于具体的输入设备,从而提高了FTK的可移植性。同样为了提高FTK的可移植性,我们需要对显示设备进行抽象。这里我们引入接口FtkDisplay来抽象显示设备:
嵌入式GUI FTK设计与实现-事件源(FtkSource)
By 李先静 523 views
在《主循环》一节中, 我们介绍了MainLoop 处理各个事件源的方法,它在事件源上等待事件发生,然后调用事件源的处理函数去处理事件。事件源(FtkSource)是对事件来源的一种抽象,事件的来源可能是一个输入设备(如键盘和触摸屏),可能是一个定时器,也可能是一个网络套接字或管道。总之,只要实现FtkSource要求的接口,就可以让 MainLoop来处理了。
用Android模拟器运行FTK
By 李先静 512 views
用Android模拟器运行FTK
以前写过一篇文章介绍如何在Androidr模拟器上运行FTK(http://www.limodev.cn/blog/archives/1400),那种方法有点别扭,而且要下载Android 的源代码才能编译。最近几个开发板都坏了,所以上周末研究了一下Android模拟器,自己生成文件系统,只是利用Android的模拟器来运行FTK。
Android的模拟器是基于qemu的,个人感觉qemu不好用,除了用Openmoko做的模拟器外,我还没成功用qemu来模拟运行过arm linux。Android在qemu做了不少人性化的工作,用起来比较方便。
0.请参考网上的方法安装Android SDK。
1.生成自己的init程序。
创建几个基本目录。
int init_dirs(void) { umask(0); mkdir("/dev", 0755); mkdir("/system", 0777); mkdir("/dev/block", 0755); return 0; }
创建MTD设备的结点。
int init_dev_nodes(void) { int ret = 0; ret = mknod("/dev/block/mtdblock0", 0755|S_IFBLK, makedev(31, 0)); printf("mknod /dev/block/mtdblock0 ret = %d errno=%d\n", ret, errno); return 0; }
加载system.img 分区。
int mount_filesystem(void) { int ret = 0; ret = mount("/dev/block/mtdblock0", "/system", "yaffs2", 0, NULL); printf("mount /dev/block/mtdblock0 ret = %d errno=%d\n", ret, errno); return 0; }
运行FTK的桌面。
int startup_desktop(const char* name) { struct stat st = {0}; int ret = stat(name, &st); if(ret != 0) { return -1; } printf("starting the second init: %s.\n", name); if(fork() == 0) { ret = execl(name, name); } return ret; } int switch_root(void) { int ret = chroot("/system"); ret = startup_desktop("/opt/bin/desktop"); return ret; }
2.生成ramdisk.img
rm -rf ramdisk mkdir ramdisk cd init && make; cd - >/dev/null echo "Generating ramdisk..." cd ramdisk && find . | cpio -c -o > ../initrd; cd - >/dev/null gzip initrd && mv initrd.gz ramdisk.img
3.生成system.img
if [ ! -d rootfs ] then tar xf rootfs.tar.gz fi
(在这里解压编译好的FTK(ftk-dist.tar.gz)到rootfsrts)
./mkyaffs2image rootfs system.img
4.拷贝生成的ramdisk.img system.img到SDK目录里。
echo "Copying files..." for f in ramdisk.img system.img do echo " $f --> $ADNROID_SDK_IMAGES_DIR" mv -f $f $ADNROID_SDK_IMAGES_DIR done

完整源代码和脚本请到这里下载:
svn checkout http://ftke.googlecode.com/svn/trunk/android-ftk-emu android-ftk-emu
《系统程序员成长计划》示例代码
By 李先静 1,744 views
在googlecode上建立了一个项目:http://code.google.com/p/spexamples/ 用来维护《系统程序员成长计划》示例代码。
无论是示例代码还是书中的BUG,请大家Report到http://code.google.com/p/spexamples/issues/list。
《系统程序员成长计划》成长过程
By 李先静 2,206 views
《系统程序员成长计划》的起源应该追溯到六年前了。04年我进入恒基伟业深圳研发部,参与商务通隐形手机开发。在此之前我是做服务器软件开发的,对嵌入式软件开发非常好奇,所以想方设法进入这个行业。恒基伟业在嵌入式方面的实力也是相当高的,很多在消费类设备方面的开发高手都有在恒基伟业工作过的经验。原以为做嵌入式开发的程序员都是非常牛的人,动不动都是能写上上万行汇编语言。真正进入这个行业之后,才知道牛人毕竟是少数,大部分人都和我一样是普通的程序员。
FTK移植指南(初稿)
By 李先静 1,799 views
1.内存分配
要求:实现malloc/realloc/free三个函数,函数原型和标准C一致。或者实现FtkAllocator接口。
参考:ftk_allocator_default.c
2.文件操作
要求:实现FtkMmap接口。libpng和libjpeg还要求实现标准C的FILE(也可以用自己的解码器)。
参考:os/linux/ftk_mmap_linux.c
FTK-0.4 发布
By 李先静 1,369 views
经过大家一个月的努力,在FTK诞生6个月之际,FTK-0.4如期发布,其主要修改有:
1. 修改了一些BUG。
2. 完整的支持LUA绑定。
3. 完善交叉编译脚本。
4. 增加FTK配置文件。
5. 优化显示速度。
6. 增加缩放动画效果。
7. UCOSII支持(Windows模拟环境)。
特别感谢minpengli,Riwen Huang,zhangalion,tao yu,yapo su, phil song, ZhiHua Huang, hua song, Richard Sharpe和其他参与FTK开发和讨论的朋友们。欢迎大家加入邮件列表讨论。
嵌入式GUI FTK设计与实现-主循环
By 李先静 1,406 views
带图形用户界面(GUI)的应用程序和传统的批处理程序是不同的:
* 批处理程序是一步一步的执行,直到完成任务为止,完成任务后程序立即退出。
* 图形用户界面应用程序则是事件驱动的,它等待事件发生,然后处理事件,如此循环,直到用户要求退出为止。
FTK在ben上运行起来了
By 李先静 896 views
Qi Hardware是由一帮出色的hacker组成的团队,和他们老大Wolfgang Spraul 有过一面之缘,对他们也是很佩服的。呵,帮他们打个广告吧。另外,FTK已经在ben上运行起来了。
关于变量的初始化
By 李先静 1,121 views
做了两年的调试工作后,我对没有初始化的变量引起BUG总是有种恐慌,所以习惯给任何变量都赋上一个初始值。今天一个新同事问到一个问题,int a[100] = {0};是初始化第一个元素还是所有元素?我说是所有的。我们看看下面这个例子:
0xlab对Broncho A1的评测
By 李先静 1,078 views
0xlab对Broncho A1的评测。原文:http://blog.kanru.info/archives/688
上週末下班前,在桌上發現一個包裹,原來是渡海而來的兩隻 A1!這兩隻 A1 是 Broncho 的產品,詳細規格可以參考 Broncho 的網頁。
大伙興奮的開箱啦!
包裝和 Hero 的很像。3.2 寸 LCD, 480×320 的解析度,200 萬畫素的相機鏡頭,CPU 是 Marvell 300 (624 MHz),記憶體是 256 + 128 MB,支援 WIFI, Bluetooth, FM, GPS。不是使用標準的 USB 接口,但同一個接口可以接 USB、耳機、變壓器。觸控螢幕使用起來的感覺像是電容式的,反應非常靈敏,輕輕的觸摸就有反應。
系統是 Android Cupcake,內建軟體有不少 Google App,最另人驚訝旳是上面有 Android Market 可以用,試著從 Market 上面下載了一些小遊戲下來玩,完全沒有問題,真是太牛了!另外一點就是有內建手寫輸入,速度不快但是準確度不錯。除此之外還有谷歌拼音可以用。
測試的途中無線網路與 GPS 不是很穩,除此之外以一隻中低價位的手機來說表現的相當不錯。
嵌入式GUI FTK设计与实现-三项基本原则
By 李先静 1,051 views
记得X Window在设计初期就提出了七项基本指导原则,在后面X Window几十年的演变过程中,都以这些基本原则作为指导思想。其中给我印象比较深的一条就是:提供机制而不是策略。X Window一直都遵循这条原则,它只提供实现某些功能的机制,而把实现的策略留给ToolKit或其它辅助软件。为了让FTK在以后的演化过程中不至于迷失方向,我们也给FTK定了三项基本原则:
FTK google group开通,欢迎加入交流。
By 李先静 910 views
FTK google group开通,欢迎加入交流。
| Homepage: | https://groups.google.com/group/funnytoolkit | |
| Group email: | funnytoolkit@googlegroups.com |
如果你不会翻墙,请用gmail发邮件给我。谢谢。
嵌入式GUI ftk-0.3发布
By 李先静 800 views
在终端下修改Broncho A1的系统设置
By 李先静 579 views
一位朋友玩Broncho A1的锁屏图案,结果手机被锁住了,输入google ID也不行(在我这里可以)。恢复系统吧,他又不想重装所有软件,于是我研究了一下在命令行修改系统设置的方法。他不是搞技术的,所以我让他把 settings.db改个名或者删除掉,不过那样做有点暴力。这里介绍一种稍微麻烦但更友好一点的方法。
嵌入式GUI FTK支持输入法
By 李先静 573 views
春节期间给FTK增加输入法支持,目前支持拼音输入法,五笔输入法和手写输入法。手写输入法只是实现了框架,识别引擎才开个头,这是今年FTK开发的重点任务。拼音输入法,五笔输入法的基本功能都可以用了吧,易用性方面还需要进一步完善。
改用gmail了:xianjimli at gmail.com
By 李先静 842 views
hotmail的邮件搜索功能太难用了,逼着我用gmail了:xianjimli at gmail.com
嵌入式GUI ftk-0.2发布
By 李先静 1,089 views
经过一个月的努力,FTK-0.2如期发布,其主要修改有:
- 修改了一些BUG,对代码做了一些优化。考虑到RTOS不支持select,所以去掉了main loop对pipe的依赖,提高FTK的可移植性。
- 移植到Windows平台,加了VS2008 Express Edition的工程文件。
- 增加了MessageBox和Tips的支持。
- 增加了弹出菜单的支持。
- 增加了ComboBox的支持。
- 增加了窗口从中间向四周扩展的效果。
- 增加窗口淡入效果。
- 对话框支持模态和非模态两种。
- 增加了C++调用的支持。
- 增加了Cursor的支持,由–enable-cursor命令行参数决定。
有兴趣的朋友请到FTK下载源代码。
附:
A gui library for embedded system. FTK equals funny tool kit, write it just for fun.

PC通过Android手机(Broncho A1)访问Internet
By 李先静 1,106 views
Broncho A1和普通Android手机一样,不能直接拿来当modem使用,不过可以把它当作一个网关或代理,这样,PC就可以通过A1来访问Internet 了。今天用privoxy(http://www.privoxy.org/)试了一下,工作正常,具体步骤如下:



April 7th, 2010














