Welcome 微信登录

首页 / 操作系统 / Linux

QNX学习者,向ARM汇编进发!

QNX学习者,向ARM汇编进发!

既然BeagleBoard是ARM的板子,自己又有想法了解学习一下ARM体系结构和ARM汇编,有机会肯定要在这个板子上跑跑ARM汇编程序。在网上了解了一下,一般的做法是搭建一个Linux环境设置混编环境,编译后将程序传到板子上运行。搭建这些环境有些麻烦,而且自己手上的QNX Momentics环境就浪费了。于是决定在QNX Momentics上找个方法编译,链接ARM汇编程序,然后直接通过QNX Momentics的调试器和BeagleBoard板上的QN...
QNX开发与PlayBook开发

QNX开发与PlayBook开发

自己最早的时候动了念头学习QNX是因为RIM的BlackBerry PlayBook的发布,还有传闻的BlackBerry SuperPhone的消息。关于BlackBerry SuperPhone的消息到现在仍然只是消息,暂且放下。PlayBook已经可以在市场上看到了,虽然中国区并没有正式销售PlayBook。PlayBook上的应用开发方式目前有两种,Adobe AIR和WebWorks。网上有消息说是PlayBook上的原生开发工具也很快要发布了,...
第一个QNX图形程序

第一个QNX图形程序

理清了思路以后开始通过实例测试GF的使用过程,为了简化测试环境,这次使用的是QNX Momentics环境和QNX虚拟机环境,没有使用BeagleBoard作为运行目标,主要是怕直接在板子上运行会有其他因素影响测试。在QNX momentics环境中创建了一个新的QNX C Project, 在main.c里先加上gf头文件的引用:#include <gf/gf.h>然后在main方法里加上第一步操作,就是通过fg_dev_attach()方法...
Linux平台和Windows平台下Web Service加载JNI dll的区别

Linux平台和Windows平台下Web Service加载JNI dll的区别

Web Service是由Java编写,部署在Tomcat上。 Web Service调用JNI DLL之前,需要加载该DLL,在生成WAR包的java工程中,可以使用“System.load()” 来加载外部DLL,但是必须写全路径,这样不利于跨平台。也可以使用函数"System.loadLibrary()"来加载外部DLL,只需要写文件名(省略后缀名)。如果找不到库,就会弹出 异常UnsatisfiedLinkError no *** in java....
Web Service开发之利用WSDL生成Java工程

Web Service开发之利用WSDL生成Java工程

WSDL(Web Service Description Language),定义了类以及类的成员函数。AXIS2 有wsdl2java.bat 用于将wsdl生成java工程。开发工具 IntelliJ IDEA 也可以从WSDL生成一个package,里面有已声明的各个类的定义,以及他们的成员函数声明。运行 IntelliJ IDEA ,建立一个java工程。首先需要配置工程,如果网速快, IntelliJ IDEA 会自动从官网下载axis等库,如果...
升级Android内置apk版本

升级Android内置apk版本

如果升级Android内置apk版本,遇到系统重启后又被还原,那是因为你手动安装的apk版本号和内置系统的apk版本号一样。这样的情况,在开发调试系统apk的情况中容易出现。关于Android系统内置的apk更新后,在系统重启以后又被还原的问题,解决方法如下:将 frameworks/base/services/java/com/android/server/PackageManagerService.java 中 scanPackageLI函数的pack...
Linux设备驱动工程师之路——内核链表的使用

Linux设备驱动工程师之路——内核链表的使用

一、重要知识点1.内核链表和普通链表的区别内核链表是一个双向链表,但是与普通的双向链表又有所区别。内核链表中的链表元素不与特定类型相关,具有通用性。我们先来看一幅图 kernel list展示的是内核链表的结构,normallist展示的是普通链表的结构。head是链表头,p1,p2,p3是链表节点。从图中可以看出普通链表的p1的next指针是指向的结构体p2的地址,p2的pre指针指向p1结构体的地址。而内核链表的p1的next指向的是p2结构体中包含p...
Linux设备驱动工程师之路——硬件访问及混杂设备LED驱动

Linux设备驱动工程师之路——硬件访问及混杂设备LED驱动

一、重要知识点 1.I/O端口和I/O内存寄存器和常规内存的区别:寄存器和RAM主要不同在于寄存器有边际效果,读取某个地址时可能导致该地址的内容发生变化,比如说很多设备的中断状态寄存器只要一读取,便自动清0。所以硬件寄存器不能直接访问,而要通过I/O端口和I/O内存两种方式访问。在硬件层,I/O内存区域和I/O端口区域没有概念上的区别:它们都是通过向地址总线和控制总线发生电平信号进行访问,再通过数据总线读写数据。 a.I/O端口: 一些CPU制造厂在它们...
Linux设备驱动工程师之路——Linux内存管理机制及mmap方法

Linux设备驱动工程师之路——Linux内存管理机制及mmap方法

一、重点知识 1. Linux内存管理机制 Linux 2.6.29内核为每种CPU提供统一的界面,采用四级页面管理构架。来兼容二级、三级、四级管理架构的CPU。通过页式管理机制完成虚拟地址(线性地址)到物理地址的映射。一般每个页大小为4K。cr3寄存器中保存了创建进程时分配的值。 Linux操作系统采用虚拟内存管理技术,使得每个进程都有独立的进程地址空间,该空间大小是3G,用户看到和接触的都是虚拟地址,无法看到实际的物理地址。利用这种虚拟地址不但能起到保...
Linux设备驱动工程师之路——高级字符设备驱动程序

Linux设备驱动工程师之路——高级字符设备驱动程序

高级字符设备驱动在简单字符驱动的基础上添加ioctl方法、阻塞非阻塞读写、poll方法、和自动创建设备文件的功能。一、重要知识点 1.ioctlioctl命令:使用4个字段定义一个ioctl命令,包括type: 幻数,一般使用一个字符定义,在内核中唯一。number: 序数。direction: 数据传输方向,当不涉及数据传输时,此字段无效。size: 所涉及用户数据的大小,当不涉及数据传输时,此字段无效。_IOC_NONE_IOC_READ_IOC_WR...
GCC编译“Value too large for defined data type”错误解决办法

GCC编译“Value too large for defined data type”错误解决办法

在Linux上编译通过mount来访问的windows共享目录下的C代码的时候,总是出现Valuetoolargefordefineddatatype错误,但是检查了一下代码,没有用的到什么特殊的函数,并且同样的代码在别的机器上就可以编译通过,或者把代码从共享目录下拷贝到本地也可以编译,就是在共享目录目录下不能编译。后来就想到可能是mount命令导致的这个问题。查了一些资料,发现在mount的时候加上“nounix,noserverino”选项后,就不再出...
浅析Android的RILD服务进程的消息循环

浅析Android的RILD服务进程的消息循环

Android中,RILD是RIL(Radio Interface Layer) Deamon的简称。简单的说它下面承接GSM/GPRS Modem(电话通信模块),上面接电话应用相关的Java库(telephony internal)。telephony internal通过socket将请求发送给RILD的消息循环,消息循环则将请求转发给底层通信模块(直接调用底层的库)来实现对通信模块功能的调用。反之,当通信模块有类似于来电的消息时,也会通过RILD的...
编译Android源码的Make命令解析

编译Android源码的Make命令解析

摘要:本文描述了编译Android源码时,make命令后面隐藏的玄机,通过一步步的分析,你会发现,实际上不是想象的那么复杂(肯定比编hello world复杂,哈)。正文:最近编译了一下android 1.6,同时也分析了一下android的build system。build system对我来说实在太大,要想了解这个系统的细节不是一两天可以完成的,于是我就退而求其次,去了解编译android源码的命令make。还是那句话,一切都是从编译开始的。1. m...
<< 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 >>