《系统程序员成长计划》@DouBan:

By 李先静 1,923 views

《系统程序员成长计划》@DouBan: http://book.douban.com/subject/4722708/ 欢迎评论。

categoriaUncategorized commento3 Comments dataApril 7th, 2010
Read All

嵌入式GUI FTK设计与实现-显示设备(FtkDisplay)

By 李先静 556 views

对于GUI来说,输入设备(如键盘和鼠标)和显示设备 (如LCD)都是与硬件相关的。在前面关于《事件源(FtkSource)》的一节中,我们看到了FtkSource很好的抽象了输入设备,让FTK独立于具体的输入设备,从而提高了FTK的可移植性。同样为了提高FTK的可移植性,我们需要对显示设备进行抽象。这里我们引入接口FtkDisplay来抽象显示设备:

categoriaUncategorized commentoNo Comments dataJuly 13th, 2010
Read All

嵌入式GUI FTK设计与实现-事件源(FtkSource)

By 李先静 543 views

在《主循环》一节中, 我们介绍了MainLoop 处理各个事件源的方法,它在事件源上等待事件发生,然后调用事件源的处理函数去处理事件。事件源(FtkSource)是对事件来源的一种抽象,事件的来源可能是一个输入设备(如键盘和触摸屏),可能是一个定时器,也可能是一个网络套接字或管道。总之,只要实现FtkSource要求的接口,就可以让 MainLoop来处理了。

categoriaUncategorized commento1 Comment dataJuly 9th, 2010
Read All

用Android模拟器运行FTK

By 李先静 534 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

android-ftk
完整源代码和脚本请到这里下载:
svn checkout http://ftke.googlecode.com/svn/trunk/android-ftk-emu android-ftk-emu

categoriaUncategorized commentoNo Comments dataJuly 5th, 2010
Read All

改用gmail了:xianjimli at gmail.com

By 李先静 850 views

hotmail的邮件搜索功能太难用了,逼着我用gmail了:xianjimli at gmail.com

categoriaUncategorized commento2 Comments dataFebruary 20th, 2010
Read All

Android中的自动测试(1)

By 李先静 1,477 views

这几天做Broncho A1的Android兼容性测试(CTS),研究了一下Android的自动测试功能。它的执行流程如下:

categoriaUncategorized commentoNo Comments dataJanuary 12th, 2010
Read All

Gears Android WIFI/基站定位源代码分析

By 李先静 1,735 views

Broncho A1还不支持基站和WIFI定位,Android的老版本里是有NetworkLocationProvider的,它实现了基站和WIFI定位,但从 android 1.5之后就被移除了。本来想在broncho A1里自己实现NetworkLocationProvider的,但一直没有时间去研究。我知道 gears(http://code.google.com/p/gears/)是有提供类似的功能,昨天研究了一下Gears的代码,看能不能移植到 android中来。

categoriaUncategorized commentoNo Comments dataJanuary 10th, 2010
Read All

Broncho南澳行

By 李先静 1,035 views

null

Broncho & A1

categoriaUncategorized commento7 Comments dataOctober 18th, 2009
Read All

Projects owned by limodev.cn

By 李先静 1,472 views

今天整理了一下以前写的一些小程序,全部开放源代码。详细见:

http://www.limodev.cn/projects.html

欢迎使用和完善。

categoriaUncategorized commento8 Comments dataOctober 15th, 2009
Read All

让adb logcat打印内核调试信息

By 李先静 1,884 views

在默认情况下,adb logcat只能显示应用程序的调试信息,我把logcat.cpp修改了一下,让它同时可以打印内核调试信息

categoriaUncategorized commentoNo Comments dataOctober 14th, 2009
Read All

Broncho新版网站上线

By 李先静 659 views

Broncho新版网站上线http://www.broncho.cn欢迎访问

categoriaUncategorized commentoNo Comments dataSeptember 15th, 2009
Read All

虚拟鼠标驱动程序

By 李先静 975 views

前段时间写一个程序,要向系统中注入mouse事件,我又不想信赖于具体的GUI,就写一个虚拟mouse设备驱动程序,感觉挺好用的,不过后来发现linux其实有一个uinput驱动程序实现了类似的功能。幸好后来才发现uinput这玩意儿,否则就没有机会去写了,有时真是宁愿知识面窄一点,这样才有机会重复发明一些轮子,从中获得一些乐趣。

categoriaUncategorized commento2 Comments dataSeptember 12th, 2009
Read All

用DBUS实现Startup notification的构想

By 李先静 1,225 views

有的应用程序起动过程比较长,在起动之后,一定时间内没有反应。为了避免让用户等得不耐烦,或者误以为死机了。在此期间,提供一个动画或者其它东西来标识正在起动的状态,可能会更友好一些。Startup notification的初衷也在于此,它跟踪应用程序的起动过程,以便给用户提供一些反馈信息。

categoriaUncategorized commento4 Comments dataAugust 23rd, 2009
Read All

KJAVA虚拟机Hack笔记-MIDP HighLevel GUI概述

By 李先静 580 views

KJAVA虚拟机Hack笔记-MIDP HighLevel GUI概述

MIDP 高级图形用户界面提供三种窗口,它们都从Displayable类继承过来:

categoriaUncategorized commentoNo Comments dataAugust 3rd, 2009
Read All

系统程序员成长计划-内存管理(一)

By 李先静 1,651 views

共享内存

大家都知道,进程的地址空间是独立的,它们之间互不影响。比如同样地址为0xabcd1234的内存,在不同的进程中,它们的数据是完全不同的。这样做的好处有:首先是每个进程的地址空间变大了,让编写程序更为容易。其次是一个进程崩溃了,不会影响其它进程,提高了系统的稳定性。

categoriaUncategorized commento3 Comments dataApril 22nd, 2009
Read All

金沙湾猎豹野战记

By 李先静 673 views

金沙湾猎豹野战记

categoriaUncategorized commento5 Comments dataMarch 24th, 2009
Read All

用NETLINK实现磁盘满通知

By 李先静 1,366 views

手机内置FLASH容量有限,在磁盘空间不足的情况下,应该提醒用户进行磁盘清理。这个处理在哪里做比较好呢?每次写入数据时由调用者检测显然是不合理的,因为处理的太多了,何况修改SQLITE等第三方程序也是不明智的,那样会给升级版本带来麻烦。比较好的办法是在文件系统中做处理,最近同事修改了yaffs2支持磁盘满通知功能。做法如下:

categoriaLinux Mobile, Uncategorized commento3 Comments dataNovember 6th, 2008
Read All

yaffs2 image逆向工具

By 李先静 2,850 views

这两天在分析yaffs2文件系统,花了几天时间把yaffs2的代码通读了几遍,基本脉络差不多搞清楚了。在网上找到一些资料,对我的阅读有很大帮助,不过它们介绍得不太完整。接下来有时间的话,我会写一个yaffs2源代码分析的系列。一方面进一步加深对yaffs2的理解,另外一方面也希望对分析yaffs2的朋友有所帮助。

categoriaLinux Mobile, Uncategorized commento9 Comments dataNovember 4th, 2008
Read All

共享库函数调用原理

By 李先静 1,231 views

我们知道函数名就是一个内存地址,这个地址指向函数的入口。调用函数就是压入参数,保存返回地址,然后跳转到函数名指向的代码。问题是,如果函数在共享库中,共享库加载的地址本身就不确定,函数地址也就不确定了,那如何调用共享库中的函数呢?这就是本文要回答的。

categoriaUncategorized commento1 Comment dataOctober 27th, 2008
Read All

Android公布源代码

By 李先静 956 views

非常高兴看到Android公布源代码,虽然这证明我对于android开放性的质疑是错误(其它观点保留)。

categoriaUncategorized commento8 Comments dataOctober 22nd, 2008
Read All

两则glib使用技巧

By 李先静 385 views

两则glib使用技巧

glib是Broncho平台的基石,几乎任何函数库,任何应用程序,以及任何daemon服务进程,都大量使用glib提供的函数。glib在我们平台中的地位有如STL在C++中的地位一样,熟练使用glib,对于提高开发效率有特别的意义,这里总结两则技巧供大家参考。

categoriaUncategorized commentoNo Comments dataNovember 12th, 2007
Read All

Linux Ac97音频处理介绍

By 李先静 348 views

昨天从整体上介绍了一下音频处理流程,让大家对音频处理有个大致的概念,以便进行深入的研究。

categoriaUncategorized commentoNo Comments dataNovember 12th, 2007
Read All

linux蓝牙驱动代码阅读笔记

By 李先静 232 views

昨天看了一下介绍蓝牙协议文档,今天索性对照看了看kernel里的代码(bluez),这里记点笔记,还是继承了老毛病,只关注整体流程而忽略细节,先了解个大概,等真正需要时再仔细分析。

categoriaUncategorized commentoNo Comments dataNovember 12th, 2007
Read All