First, you can find libaio source in http://libaio.sourcearchive.com/

Second,download the libaio_0.3.109.orig.tar.gz version source,unzip it

Than you can find the real source in src directory.

But there is lack of mips architecture support.

So I just write some ugly patch about it.

The key is a .h file.You can name it syscall-mips.h

here is the code :

/****************BEGIN*************************/

#define __SYSCALL_CLOBBERS "$1", "$3", "$10", "$11", "$12", "$13", \
    "$14", "$15", "$24", "$25", "memory"


 
#define io_syscall1(type,fname,sname,type1,arg1)
\
type fname (type1 arg1)
\
{
\
    long _sys_result;                     \
    register long __v0 asm("$2");         \
    register long __a0 asm("$4") = arg1;  \
    register long __a1 asm("$7");         \
    __asm__ __volatile__(             \
        ".set push\n\t"               \
        ".set noreorder\n\t"          \
        "li   %0, %2\n\t"             \
        "syscall\n\t"                 \
        ".set pop\n\t"                \
        :"=r"(__v0),"=r"(__a1)        \
        :"i" (__NR_##sname),"r"(__a0) \
        : __SYSCALL_CLOBBERS          \
    );                                \
    _sys_result = __v0;               \
    _sys_result;                      \
}

 
 
#define io_syscall2(type,fname,sname,type1,arg1,type2,arg2)
\
type fname (type1 arg1,type2 arg2)
\
{
\
    long _sys_result;                     \
    register long __v0 asm("$2");         \
    register long __a0 asm("$4") = arg1;  \
    register long __a1 asm("$5") = arg2;  \
    register long __a2 asm("$7");         \
    __asm__ __volatile__(             \
        ".set push\n\t"               \
        ".set noreorder\n\t"          \
        "li   %0, %2\n\t"             \
        "syscall\n\t"                 \
        ".set pop\n\t"                \
        :"=r"(__v0),"=r"(__a2)        \
        :"i" (__NR_##sname),"r"(__a0),"r"(__a1) \
        : __SYSCALL_CLOBBERS          \
    );                                \
    _sys_result = __v0;               \
    _sys_result;                      \
}


 
#define io_syscall3(type,fname,sname,type1,arg1,type2,arg2,type3,arg3)
\
type fname (type1 arg1,type2 arg2,type3 arg3)
\
{
\
    long _sys_result;                     \
    register long __v0 asm("$2");         \
    register long __a0 asm("$4") = arg1;  \
    register long __a1 asm("$5") = arg2;  \
    register long __a2 asm("$6") = arg3;  \
    register long __a3 asm("$7");         \
    __asm__ __volatile__(             \
        ".set push\n\t"               \
        ".set noreorder\n\t"          \
        "li   %0, %2\n\t"             \
        "syscall\n\t"                 \
        ".set pop\n\t"                \
        :"=r"(__v0),"=r"(__a3)        \
        :"i" (__NR_##sname),"r"(__a0),"r"(__a1),"r"(__a2)  \
        : __SYSCALL_CLOBBERS          \
    );                                \
    _sys_result = __v0;               \
    _sys_result;                      \
}



#define io_syscall5(type,fname,sname,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
  type5,arg5)
\
type fname (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5)
\
{
\
    long _sys_result;                     \
    register long __v0 asm("$2");         \
    register long __a0 asm("$4") = arg1;  \
    register long __a1 asm("$5") = arg2;  \
    register long __a2 asm("$6") = arg3;  \
    register long __a3 asm("$7") = arg4;  \
    register long __a4 asm("$8") = arg5;  \
    register long __a5 asm("$9");         \
    __asm__ __volatile__(             \
        ".set push\n\t"               \
        ".set noreorder\n\t"          \
        "li   %0, %2\n\t"             \
        "syscall\n\t"                 \
        ".set pop\n\t"                \
        :"=r"(__v0),"=r"(__a5)        \
        :"i" (__NR_##sname),"r"(__a0),"r"(__a1),"r"(__a2),"r"(__a3) ,"r"(__a4)   \
        : __SYSCALL_CLOBBERS          \
    );                                \
    _sys_result = __v0;               \
    _sys_result;                      \
}

/****************END*************************/

That is All.They are the most important part. The rest is just relsove compile problem.

Like somewhere is missing the mips definition, somewhere is missing the .h name.

Remeber change the CC in Makefile, use mips-gcc.

Finally,just run make command,you will get a static lib which is named "libaio.a"

I use it to work with fio tools,it's work for me.Hope it's useful to you.

今天想用一下fio在mips架构下,修改fio代码,将mips相关的地方补全,主要是缺少mips定义,还有一些头文件方面的问题。

最后发现链接的时候提示找不到libaio库。搜索了一下,在http://libaio.sourcearchive.com/下载了libaio的代码。

然后解压准备编译一个mips版本,结果悲剧的发现libaio不支持mips架构,简单的分析了一下源码,发现原来就差一个头文件,用来

定义在mips架构下,用户态如何进入内核的翻译,这个是和架构强相关的。

简单开始google和stackoverflow了一把,没有什么有用的发现。分析了一下x86和x86_64架构的头文件,发现还算简单。

于是准备自己写一下,google一下mips的ABI接口,然后又搜索了一下系统调用的实现,然后就完成了上面的头文件的主要内容。

主要就是利用系统调用的接口,是linux内核支持的aio相关的调用,通过寄存器传入多个参数到内核。

剩下的就是解决libaio本身的编译问题,注意一下,这部分代码会有编译告警,分析一下,主要是类型转换方面的,我决定不管了^_^

编译得到了libaio.a。下一步是将libaio.a拷贝到库目录中去。编译通过后,到mips环境下试了一下,ok成功了。

libaio under MIPS architecture /在mips架构下使用的libaio的更多相关文章

  1. OpenGL Insights 阅读有感 - Tile Based架构下的性能调校 翻译

    Performance Tunning for Tile-Based Architecture Tile-Based架构下的性能调校 by Bruce Merry GameKnife译 译序 在大概1 ...

  2. Spring Security Architecture and Implementation(架构和实现)学习笔记

    Spring Security 关于spring-security的官网文档学习笔记,主要是第8章 Architecture and Implementation(架构和实现)内容 参考: https ...

  3. CI Weekly #5 | 微服务架构下的持续部署与交付

    CI Weekly 围绕『 软件工程效率提升』 进行一系列技术内容分享,包括国内外持续集成.持续交付,持续部署.自动化测试. DevOps 等实践教程.工具与资源,以及一些工程师文化相关的程序员 Ti ...

  4. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  5. [Architecture Design] 跨平台架构设计

    [Architecture Design] 跨平台架构设计 跨越平台 Productivity Future Vision 2011 在开始谈跨平台架构设计之前,请大家先看看上面这段影片,影片内容是微 ...

  6. MVC项目实践,在三层架构下实现SportsStore-02,DbSession层、BLL层

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  7. MVC项目实践,在三层架构下实现SportsStore-01,EF Code First建模、DAL层等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  8. MVC项目实践,在三层架构下实现SportsStore-03,Ninject控制器工厂等

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  9. MVC项目实践,在三层架构下实现SportsStore-04,实现分页

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

随机推荐

  1. MongoDB学习笔记02

    MongoDB中使用find来进行查询,查询就是返回一个集合中文档的子集,子集合的范围从0个文档到整个集合.find的第一个参数决定了要返回哪些文档.空的查询文档{}会匹配集合的全部内容,要是不指定查 ...

  2. Ext树控件第一次勾选父节点子节点没选中

    项目中同事提出了这样一个bug 问题: 第一次勾选父节点子节点竟然没选中,逆天了啊 初步分析: 可能是之前代码的逻辑错误造成的,随进入调试阶段... 调试中发现该参数为空(原来写代码的也太没素质了), ...

  3. Java学习——接口Interface

    接口: 初期理解可以认为是一个特殊的抽象类 当抽象类中的方法都是抽象的,那么该类可以通过接口的形式来表示.class用于定义类interface 用于定义接口 接口定义时,格式特点:1,接口中常量见定 ...

  4. .Net Memory -- Windbg基本命令

    命令 解释 .cls 清空命令窗口屏幕 .load dllfullpath 加载debugger扩展dll如SOS sosex psscor. .loadby dll moduleName 加载deb ...

  5. div没有设置高度时背景颜色不显示(浮动)

    在使用div+css进行网页布局时,如果外部div有背景颜色或者边框,而不设置其高度,在IE浏览器下显示正常.但是使用Firefox/opera浏览时却出现最外层Div的背景颜色和边框不起作用的问题. ...

  6. Unity-资源

    模型.材质.动画 Unity的默认系统单位为"米" 三维软件 三维软件内部米制尺寸/m 默认设置导入Unity中的尺寸/m 与Unity单位的比例关系 Maya 1 100 1:1 ...

  7. ural 1297 Palindrome(Manacher模板题)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 求最长回文子串. http://acm.timus.ru/problem.aspx ...

  8. 面试题:Java静态/非静态方法重写

    1.非静态方法重写 public class Test { public static void main(String[] args) throws Exception { Tree pine = ...

  9. UnSupported Encoding错误

    学习struts2的时候碰到tomcat报错:org.apache.jasper.JasperException: Unsupported encoding:  UTF-8,原因是jsp文件中的pag ...

  10. asp.net js 获取服务器控件值

    最近在弄js 但是设计到获取服务器控件的值,有点模糊.百度查了资料都达不到效果.现在看看这个,希望朋友们能用上!! <asp:Label ID="lbDepartName" ...