在bootargs中加入:fbcon=rotate:1可旋转虚拟终端。 在Linux启动之后,可以在:/sys/devices/virtual/graphics/fbcon目录中操作rotate文件,来动态控制虚拟终端的旋转变化。
在bootargs中加入:fbcon=rotate:1可旋转虚拟终端。 在Linux启动之后,可以在:/sys/devices/virtual/graphics/fbcon目录中操作rotate文件,来动态控制虚拟终端的旋转变化。
最近有客户反馈在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
...在嵌入式应用中,贴图式GUI在很多场合都有应用,做好一张图之后,图中如果有热点区域,如何快速导出这些热点区域,是个问题。
使用Firework,可以方便的在图中绘制切片,可以首先利用这个功能,将所有热点绘制成切片,然后导出,导出的时候,选择“CSS 层”
,源选择“Fireworks切片”

这样,导出来的htm文件中,每一个切片都是以一个<div>标签来表达,其位置和大小信息一目了然,接下来,只需要简单的将div转换成Keymap即可
freetype提供了完整的automake机制,之前并没有考虑使用它。今天试了一下,没问题,完全可以使用automake编译在S+core平台下工作的freetype出来。方法如下: configure虽然提供了--host来提供交叉编译的方法,但是score-elf-gcc不能直接通过configure的测试,原因如下: score-elf-gcc虽然是标准的gcc,但是它自身有如下特性:
总是忘记引脚定义,这下子要记下来:
IOA高8位,段码,1点亮
*8*
* *
D 9
* *
*E*
* *
C A
* *
*B* *F
LED:
...
很久没写博客了,最近开始玩微博,因为微博比较简单,一句话的事,一句话能成事,一句话能坏事。。。嗨,怎么跑小品了。
微博的确是个好东西,不过,回头看了一下我的博客,还是不能荒废呀。以往太在意发表的博文的质量,必须原创,这几天玩微博又有了心得,
不管是微博还是博客,管它是不是有意义呢,反正是自己的领地,我说的就是我的,不管是原创,还是心情,还是胡说八道,还是转帖,还是剽窃,总之都是我的财富。。。
博客,我回来了^_^
以下以移植到SPCE3200为例 从http://www.freetype.org/下载代码。可以下载总计三份资料:ft241.zip freetype源码ftdmo241.zip freetype demo源码ftdoc241.zip freetype文档 把freetype源码解压,可以看到其中有src、include和builds几个目录(当然还有其他的,暂时不用关心)用
网上也有相同的文章,但在QtCreator下不知道如何跟着网上的介绍来操作,所以写了此篇文章,照着做,保证有效 ^_^
创建Qt的键盘插件,重点是创建两个类:
一个基于QObject和QWSKeyboardHandler派生的 键盘处理类(Handler)
一个基于QKbdDriverPlugin派生的 键盘插件类(Plugin)
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中使用.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识别!
有了抽象类之后,接下来进入第二步,创建动态链接库工程:

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

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

后面的步骤根据需要进行设置即可。
第三步,在生成的工程的头文件中,包含之前编写的抽象类头文件,并将向导自动创建的类修改为抽象类的派生类:
#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中的类的对象
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地址
遇到此次错误的可能性非常多,一些常规的原因我这里就不说了,一般情况下,只要注意检查权限设置就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++的类的继承的特性,使得在一个基本链表的基础上,可以派生出拥有多种数据成员的节点。然而并没有像我一开始想象的那样简单:本来希望用一个类来描述一个链表,然而,除非这个类当做为一个节点来看待,否则数据成员是不太容易继承并增加的。这样一来,对链表的操作就变成了对n多个对象的操作,跟C语言中的做法好像差别不大,意义也不大。
后来想起C++中的template,之前很少有使用过,不过知道它具有类型无关的特性。其实想一想,所谓的“通用”链表管理程序,不就是希望让对链表的操作与节点本身的数据无关吗?所以,就有了下面这个C++ template版本的链表操作程序:
呵呵,叫唤着要从零开始移植一个操作系统好久了,终于迫于压力静下心来实际动手开始做。
经过了2天的奋战,终于于昨天将uCOSII移植到了一个全新的平台S+core上。
今天趁热打铁,把lwip也弄了一下,用loopback测试了一下,基本上能跑起来了,开心 ^_^
今天犒劳一下自己,决定去吃大餐,哈哈
改天把移植过程和心得贴上来 ^_^
摘自《C++沉思录》:
抽象是有选择的忽略。比如你要驾驶一辆汽车,但你又必须时时关注每样东西是如何运行的:发动机、传动装置、方向盘和车轮之间的连接等等;那么你要么永远没法开动这辆车,要么一上路就马上发生事故。
与此类似,编程也依赖于一种选择,选择忽略什么和何时忽略。也就是说,编程就是 通过建立抽象来忽略哪些我们此刻并不重视的因素。C++很有趣,它允许我们进行范围及其宽广的抽象。C++使我们更容易把程序看成抽象的集合,同时也隐藏了那些用户无需关心的抽象工作细节。