应用程序直接访问硬件

linux下,所有地址均为虚拟地址,需要由物理地址映射(ioremap或mmap)。

//***************************************************************************************************
#include <stdio.h>
#include <sys/mman.h>
#include <fcntl.h>

//#define UTXH (*(volatile unsigned int *)0xE2900020)

int main()
{
    volatile unsigned int *vmem = NULL;
    int uart = 0xE2900000; // offset = 0x20
    int fd;

///dev/mem设备文件是CPU的4G物理地址空间
    fd = open("/dev/mem", O_RDWR);
    if(fd < 0)
    {
        perror("open error:");
        return -1;
    }

vmem = mmap(NULL, 1, PROT_READ|PROT_WRITE, MAP_SHARED, fd, uart);
    if(vmem == NULL)
    {
        perror("mmap error:");
        return -1;
    }

while(1)
    {
        *(vmem + 0x20/4) = ‘a‘; //偏移0x20个字节
    }

munmap((void *)vmem, 1);
    close(fd);

return 0;
}

时间: 2024-10-14 22:47:33

应用程序直接访问硬件的相关文章

开发Android应用程序来使用硬件访问服务

1.开发Android应用程序来使用硬件访问服务 ~/android-2.3_r1/packages/experimental/Freg ----AndroidManifest.java ----Android.mk ----src ----shy/luo/freg ----Freg.java ----res ----layout ----main.xml ----values ----string.xml ----drawable ----icon.png Freg.java package

在Ubuntu为Android硬件抽象层(HAL)模块编写JNI方法提供Java访问硬件服务接口(老罗学习笔记4)

在上两篇文章中,我们介绍了如何为Android系统的硬件编写驱动程序,包括如何在Linux内核空间实现内核驱动程序和在用户空间实现硬件抽象层接口.实现这两者的目的是为了向更上一层提供硬件访问接口,即为Android的Application Frameworks层提供硬件服务.我们知道,Android系统的应用程序是用Java语言编写的,而硬件驱动程序是用C语言来实现的,那么,Java接口如何去访问C接口呢?众所周知,Java提供了JNI方法调用,同样,在Android系统中,Java应用程序通过

BCB直接访问硬件端口和物理内存 - WinIO的应用

(读硬盘参数和主板BIOS信息, 支持 Win9x/NT/2k/XP/2003) 关于直接访问端口, 有很多网站很多文章都讨论过, 但总找不到非常理想的办法.我这里用的是 Yariv Kaplan 的 WinIo 2.0.虽然 WinIO 也有缺陷, 但是是我用过的当中最好的了.WinIO 是免费的, 并且是开放源代码的, 可以直接到他的主页下载, 也可以在这里下载.Yariv Kaplan 的主页: http://www.internals.com/ WinIO 的使用非常简单, 在程序的开始

在java程序中访问windows有用户名和密码保护的共享目录

在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0)  编辑  收藏 --> Java程序中访问拥有全部读写权限的目录相对比较简单,和普通的目录没有什么差别.但是要访问一个需要用户和密码验证的目录就需要一点点小技巧了.这里介绍一个开源的库能够比较容易的实现这一需求.1. 下载库文件: https://jcifs.samba.org/ 下载的zip文件中, 不仅包含了jar文件,还有文档和

实现自己的RPi.GPIO(二)-mmap 直接访问硬件

通过驱动访问硬件是很方便简洁的事,但是我想直接操作硬件外设的寄存器.好在Linux提供了mmap函数,可以绕过驱动,直接操作外设的寄存器. mmap可以实现外设的物理地址到Linux虚拟地址的映射,这样就可以通过操作虚拟地址来操作物理地址. file = open("/dev/mem", O_RDWR|O_SYNC); mem_viraddr = mmap(NULL, GPIO_REG_ADDR_4KB, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_SHAR

用java程序直接访问URL地址

/**       * 程序中访问http数据接口       */      public static String getURLContent(String urlStr) {                     /** 网络的url地址 */           URL url = null;                    /** http连接 */       HttpURLConnection httpConn = null;                   /**/

Windows8 64位运行Silverlight程序不能访问WCF的解决方案

公司的项目是Silverlight+WCF,而我的本本是Win8 64位系统,一直无法正常运行Silverlight程序,一个同事找到了方案,现分享出来 一种情况是,Vs2010运行程序时,报无法加载项目,这时需要用管理员权限运行VS 第二种情况是:VS2010无法运行IIS进行程序调试,这时需要进行IIS的权限设置,如下图: 将权限设置允许 第三种情况,程序能在浏览器中运行,但是无法执行WCF服务,这时解决方案如下: 将Windows功能中的WCF服务中的Http激活,打上色,OK了! Win

Android应用程序、应用程序访问硬件的流程

对于分层的系统,刚开始认识时,从宏观的框架层面了解应用的构建过程,有助于形成自己对新系统的清晰概念. 1.Android应用程序构建框架: 这里就涉及活动.布局.注册之间的关系.搞清了这三者,会对真个应用的实现流程了然于心. 2.应用程序访问底层硬件的程序构成: 这里就涉及应用.Android Frameworks.JNI.硬件抽象层HAL.驱动.硬件(OS)之间的关系,了解它们间的关系,对于整个安卓系统就有了整体的清晰认识. 版权声明:本文为博主原创文章,未经博主允许不得转载.

oracle存储过程--在应用程序中访问存储过程程序完整举例

认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命名的方式存储于数据库中的.和PL/SQL程序相比,存储过程有很多优点,具体归纳如下: * 存储过程和函数以命名的数据库对象形式存储于数据库当中.存储在数据库中的优点是很明显的,因为代码不保存在本地,用户可以在任何客户机上登录到数据库,并调用或修改代码. * 存储过程和函数可由数据库提供安全保证,要想