C0EEBDA1

在梦中,我是有超能力的。。。

Linux下的fbcon的rotate

 在bootargs中加入:fbcon=rotate:1可旋转虚拟终端。 在Linux启动之后,可以在:/sys/devices/virtual/graphics/fbcon目录中操作rotate文件,来动态控制虚拟终端的旋转变化。 

TP-Link TL-WN321G+无线网卡在Linux 2.6下无法正确识别

 最近有客户反馈在Linux 2.6下,之前配备的TP-Link TL-WN321G+网卡没办法连入路由器的问题。

看了一下具体的症状,在插上USB无线网卡之后,内核会print下面的讯息:

usb 1-1.1: new full speed USB device using s3c2410-ohci and address 6

usb 1-1.1: New USB device found, idVendor=148f, idProduct=2573

...

Fireworks在嵌入式系统里的另类应用。。。

在嵌入式应用中,贴图式GUI在很多场合都有应用,做好一张图之后,图中如果有热点区域,如何快速导出这些热点区域,是个问题。

使用Firework,可以方便的在图中绘制切片,可以首先利用这个功能,将所有热点绘制成切片,然后导出,导出的时候,选择“CSS 层”

,源选择“Fireworks切片”

clip_image002

这样,导出来的htm文件中,每一个切片都是以一个<div>标签来表达,其位置和大小信息一目了然,接下来,只需要简单的将div转换成Keymap即可

freetype在S+core平台上的移植的另一法(适用于几乎任何gcc为基础的平台哦!)

freetype提供了完整的automake机制,之前并没有考虑使用它。今天试了一下,没问题,完全可以使用automake编译在S+core平台下工作的freetype出来。方法如下: configure虽然提供了--host来提供交叉编译的方法,但是score-elf-gcc不能直接通过configure的测试,原因如下: score-elf-gcc虽然是标准的gcc,但是它自身有如下特性:

海大的一个LED键盘模组的引脚定义

总是忘记引脚定义,这下子要记下来:

 

IOA高8位,段码,1点亮

 *8*
*   *
D   9
*   *
 *E*
*   *
C   A
*   *
 *B*  *F

LED:
...

久违的博客

很久没写博客了,最近开始玩微博,因为微博比较简单,一句话的事,一句话能成事,一句话能坏事。。。嗨,怎么跑小品了。

微博的确是个好东西,不过,回头看了一下我的博客,还是不能荒废呀。以往太在意发表的博文的质量,必须原创,这几天玩微博又有了心得,

不管是微博还是博客,管它是不是有意义呢,反正是自己的领地,我说的就是我的,不管是原创,还是心情,还是胡说八道,还是转帖,还是剽窃,总之都是我的财富。。。

博客,我回来了^_^

freetype在Non-OS平台下的使用(以SPCE3200为例)

以下以移植到SPCE3200为例 从http://www.freetype.org/下载代码。可以下载总计三份资料:ft241.zip freetype源码ftdmo241.zip freetype demo源码ftdoc241.zip freetype文档 把freetype源码解压,可以看到其中有src、include和builds几个目录(当然还有其他的,暂时不用关心)用

在QT下为开发板的键盘编写输入插件

网上也有相同的文章,但在QtCreator下不知道如何跟着网上的介绍来操作,所以写了此篇文章,照着做,保证有效 ^_^

 

创建Qt的键盘插件,重点是创建两个类:

 

一个基于QObjectQWSKeyboardHandler派生的 键盘处理类(Handler

 

一个基于QKbdDriverPlugin派生的 键盘插件类(Plugin

 

 

在arm-linux-gcc 3.4.1下编译 qt-embedded-4.6.2

arm-linux-gcc 3.4.1算是一个已经比较旧的版本了,现在我们在Linux 2.6.29环境下,用的是4.3.2的编译器。不过,因为还有一个S3C2410 + Linux 2.4.18的产品线,所以仍然没有舍弃 3.4.1。之前在Linux 2.4.18下,跑的是4.3.5的Qtopia,效果还算不错,但是发现新版本的qt-embedded中,有了一些比较不错的特性,比如,在一个Gui

QT中使用动态链接库

QT中使用.so有两种方式,一种是普通的.so,包含了一些函数,这种暂且不讨论

另外一种是QT中所谓的Plugin,每一个.so都包含了一个类的实现,这个类可以是一个QObject的派生类,所以,插件可以按照类的形式把某些操作封装。接下来讨论这种用法。

插件工程的建立:

第一步,通常在建立Plugin之前,需要首先有一个抽象类,用来描述Plugin的功能。

通常,抽象类写在一个.h文件中,并且,通常都会包含<QtGUI>,如果不包含,需要使用QObject派生类时会有问题。

如:

#include <QtGui>

#include <QWidget>

class TestInterface

{

public:

virtual ~TestInterface() {}

public:

virtual QString Name() = 0;

virtual bool doSomeThing() = 0;

};

Q_DECLARE_INTERFACE(TestInterface, "com.trolltech.Plugin.TestInterface/1.0") //这个宏用声明接口

最后的Q_DECLARE_INTERFACE不能少,否则编译出来的动态链接库不能被QT识别!

有了抽象类之后,接下来进入第二步,创建动态链接库工程:

clip_image002

新建工程时选择C++ Library Project,然后进入下一步后,Type选择“Shared library”,表示创建动态库:

clip_image004

取好名字后,在下一步中选择需要的组件,通常都会把QtGui选中:

clip_image006

后面的步骤根据需要进行设置即可。

第三步,在生成的工程的头文件中,包含之前编写的抽象类头文件,并将向导自动创建的类修改为抽象类的派生类:

#ifndef PODTEST_H

#define PODTEST_H

#include "pod_global.h"

#include "testInterface.h"

class PODSHARED_EXPORT PodTest : public TestInterface {

Q_INTERFACES(TestInterface)

public:

PodTest();

};

#endif // PODTEST_H

其中,Q_INTERFACES(TestInterface)是表示该类使用TestInterface接口。

在派生类的声明中,可以添加需要的虚函数的实现。

第四步,在.c文件中添加成员函数的实现。另外,在文件的最后,添加一行:

Q_EXPORT_PLUGIN2(pod, PodTest);

表示此动态库需要将PodTest类导出。

其中,pod是工程名,PodTest是需要导出的类名。

至此,动态库工程创建完毕。

动态库的使用:

QPluginLoader可以调用某个.so的插件。

QPluginLoader loader("libtest.so");

PodTest *plugin = qobject_cast<TestInterface*>(loader.instance()); // 获取so中的类的对象

嵌入式Linux下支持dhcp客户端

busybox自带dhcp客户端和服务器,分别是udhcpc和udhcpd

修改内核配置:
Networking support-->
    Networking opetions-->
        <*> Packet socket
        [*] TCP/IP networking
        [*]    IP: multicasting
        [*] Network packet filtering framework (Netfilter) -->

否则会出现:
udhcpc: socket: Address family not supported by protocol

从busybox/examples/udhcp文件夹中,复制simple.script文件到开发板的/usr/share/udhcpc/目录下

运行udhcpc即可获取IP地址

nfs服务挂载失败:Permission denied

遇到此次错误的可能性非常多,一些常规的原因我这里就不说了,一般情况下,只要注意检查权限设置就OK了。

 

不过前一阵子遇到的问题很特殊,

检查了/home/lijian目录的权限,以及/etc/exports的设置,没有问题

查看cat /var/log/messages | grep "mountd" 日志,发现如下信息:

Mar 26 15:44:56 SunplusAPP2 mountd[30998]: refused mount request from 172.20.223.18 for /home/lijian (/home/lijian): illegal port 54589

原来是由于开发板使用的端口号过大导致。

 

由于我的开发板是通过路由连接到服务器,而路由上设置了DMZ主机,并且DMZ主机不是开发板,所以导致开发板在访问外网时使用的端口号非常大

解决办法:
修改/etc/exports,加入insecure选项:
/home/lijian                   *(rw,sync,no_root_squash,insecure)

搞定!

又一个链表操作程序(C++)

之前用C写过一个通用的双向链表管理程序(《一个通用的双向链表管理程序》),主要是利用了C中强制类型转换带来的副作用。

今天闲来无事,用C++重写了一份,本来是希望利用C++的类的继承的特性,使得在一个基本链表的基础上,可以派生出拥有多种数据成员的节点。然而并没有像我一开始想象的那样简单:本来希望用一个类来描述一个链表,然而,除非这个类当做为一个节点来看待,否则数据成员是不太容易继承并增加的。这样一来,对链表的操作就变成了对n多个对象的操作,跟C语言中的做法好像差别不大,意义也不大。

后来想起C++中的template,之前很少有使用过,不过知道它具有类型无关的特性。其实想一想,所谓的“通用”链表管理程序,不就是希望让对链表的操作与节点本身的数据无关吗?所以,就有了下面这个C++ template版本的链表操作程序:

昨天移植好了uCOSII,今天又初步弄好了lwip,开心,庆祝一下^_^

呵呵,叫唤着要从零开始移植一个操作系统好久了,终于迫于压力静下心来实际动手开始做。

经过了2天的奋战,终于于昨天将uCOSII移植到了一个全新的平台S+core上。

今天趁热打铁,把lwip也弄了一下,用loopback测试了一下,基本上能跑起来了,开心 ^_^

今天犒劳一下自己,决定去吃大餐,哈哈

 

改天把移植过程和心得贴上来 ^_^

有关“抽象”的精彩描述片段

摘自《C++沉思录》:

抽象是有选择的忽略。比如你要驾驶一辆汽车,但你又必须时时关注每样东西是如何运行的:发动机、传动装置、方向盘和车轮之间的连接等等;那么你要么永远没法开动这辆车,要么一上路就马上发生事故。

与此类似,编程也依赖于一种选择,选择忽略什么和何时忽略。也就是说,编程就是 通过建立抽象来忽略哪些我们此刻并不重视的因素。C++很有趣,它允许我们进行范围及其宽广的抽象。C++使我们更容易把程序看成抽象的集合,同时也隐藏了那些用户无需关心的抽象工作细节。

分页:«123456»

Powered By Z-Blog 1.8 Spirit Build 80722 Code detection by Codefense  theme by BokeZhuti

Copyright 2008-2009 C0EEBDA1. Some Rights Reserved. 备案号:京ICP备09020681号