专栏首页月色的自留地在Ubuntu上搭建kindle gtk开发环境

在Ubuntu上搭建kindle gtk开发环境

某个角度上说,kindle很类似android,同样的Linux内核,同样的Java用户层。不过kindle更注重简单、节能、稳定。Amazon一向认为,功能过多会分散人们阅读时候的注意力。 Kindle底层的Linux比Android保持了更多的linux兼容性,可以使用GTK或者QT编写程序。QT适合编写大的、独占界面性的应用,比如多看就曾经发布过一个Kindle之上的版本,现在还有很多人用,可惜因为公司战略调整的原因,这个产品被废弃了。GTK及最基本的Linux应用更适合开发一些补丁性的小程序,来补充Kindle的基本功能。在Ubuntu上搭建kindle的gtk开发环境非常简单,只需要一条命令:

sudo apt-get install pkg-config gcc-arm-linux-gnueabi libgtk2.0-dev

接着我们来写一个hello world来验证功能:(文件名:testGtk.c)

#include <gtk/gtk.h>

static void hello( GtkWidget *widget,gpointer data ) {
    gtk_main_quit ();
}

static gboolean delete_event( GtkWidget *widget, GdkEvent  *event, gpointer   data ) {
    g_print ("delete event occurred\n");
    return FALSE; // we do want to quit
}

static void destroy( GtkWidget *widget, gpointer   data ) {
    gtk_main_quit ();
}

int main( int   argc, char *argv[] ) {

    GtkWidget *window;
    GtkWidget *button;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    g_signal_connect (window, "delete-event", G_CALLBACK (delete_event), NULL);
    g_signal_connect (window, "destroy", G_CALLBACK (destroy), NULL);
    gtk_container_set_border_width (GTK_CONTAINER (window), 10);
    button = gtk_button_new_with_label ("Hello World");
    g_signal_connect (button, "clicked", G_CALLBACK (hello), NULL);
    gtk_container_add (GTK_CONTAINER (window), button);
    gtk_window_set_title ( GTK_WINDOW(window) , "L:A_N:application_ID:test");
    gtk_widget_show_all (window);

    gtk_main ();
    return 0;
}

接着先在桌面Linux电脑上编译来试一下:

gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs`

在电脑上执行./testGtk,可以看到结果正确。 交叉编译kindle的版本则相对比较复杂,我们还是直接写一个Makefile吧,避免手工输入太长容易出错,同时Makefile中也增加了macos的编译部分。gtk虽然看上去很陈旧、落伍,但是跨平台用起来,其实比很多主流应用还要顺畅。

GCC=gcc
ARMGCC=arm-linux-gnueabi-gcc
ARMLIBS=`pkg-config gtk+-2.0 --cflags` -L/usr/arm-linux-gnueabi/lib/ -L/home/andrew/dev/kindleLib/ -lgtk-x11-2.0 -lgdk-x11-2.0 -lXrender -lXinerama -lXext -lgdk_pixbuf-2.0 -lpangocairo-1.0 -lXdamage -lXfixes -latk-1.0 -lcairo -lpixman-1 -lpng12 -lxcb-shm -lxcb-render -lX11 -lxcb -lXau -lXdmcp -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lfontconfig -lfreetype -lz -lexpat -lgobject-2.0 -lffi -lgmodule-2.0 -lgthread-2.0 -lglib-2.0

keys = testKindleGtk

all:$(keys) $(objs)


testKindleGtk:testGtk.c
    $(ARMGCC) -o testKindleGtk testGtk.c $(ARMLIBS)
    
x86:
    gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs` 
osx:
    export PKG_CONFIG_PATH=/usr/X11/lib/pkgconfig && gcc -o testGtk testGtk.c `pkg-config gtk+-2.0 --cflags --libs` 
clean:
    rm $(keys) testGtk

项目的源码已经上传到github,有兴趣的可以下载试试。 咳。。。不好意思,原谅我把最重要的放到最后说,在kindle上测试这个程序,需要越狱kindle,在KPW2之间的版本,在网上搜索,有软件的方法越狱。之后的版本就复杂了,可能还需要拆机引串口线的方式。 不过总感觉kindle的越狱还是很有意义的,主要是原生系统对于纯文本的排版水平实在太差,我就是越狱后装了再也见不到更新的多看系统。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • python scrapy 入门,10分钟完成一个爬虫

    俺踏月色而来
  • 在龙芯小本上安装Debain8.10

    俺踏月色而来
  • win10配置linux子系统使用python绘图并显示--WSL使用GUI输出

    默认情况下,Win10的linux子系统(WSL)是只能使用命令行程序的。所有图形界面的程序都无法执行。

    俺踏月色而来
  • 腾讯云 CMQ 消息队列在 Linux 环境下的使用

    腾讯云消息队列(Cloud Message Queue,以下简称CMQ)是分布式的消息队列服务,用于存储进程间传输的消息,为分布式部署的不同应用之间或者一个应用...

    李少华
  • 既得利益者的灭顶之灾:当数字货币结合证券...

    区块链大本营
  • 使用ballgown进行转录本水平的差异分析

    常见的转录组差异分析有两种策略,一种是基于raw count的定量方式,比如DESeq2, edgeR等;另外一种是基于FPKM/RPKM的定量方式,比如cuf...

    生信修炼手册
  • 比特币闪电网络就要来了,竞争币会因此消失吗?

    过去的几个月时间里,比特币网络的交易手续费飞涨,达到了历史最高点30美元。很多人建议推出一种交易成本更低、网络也不容易堵的加密货币来替代比特币。 高昂的链上交易...

    企鹅号小编
  • 区块链101:什么是闪电网络?

    “闪电网络”被认为是目前正在开发的加密货币扩展的最有效的解决方案之一,它有效地在比特币之上创建了一层,使快速和廉价的交易能够满足比特币区块链的要求。 这一想法是...

    首席架构师智库
  • 17.12.6日报

    1,找到vlc插件加载崩溃的原因了,是 WebPluginImpl::platformStart后,搞了个异步设置窗口句柄,但在这过程中paint被调用到,vl...

    龙泉寺扫地僧
  • 程序员面试闪充--UML类图关系

    我们曾借白茶清欢等一个人,曾借花开花落叹宠辱不惊。今天借着类图来了解面向对象又有何不可呢? 小视频传送门:小视频传送门 ? 对象模型中,类图是来描述系统的静态结...

    谦谦君子修罗刀

扫码关注云+社区

领取腾讯云代金券