
龙芯相关
文章平均质量分 73
Jack Tan
这个作者很懒,什么都没留下…
展开
-
MIPS GCC 嵌入式汇编(龙芯适用)
当前版本: 0.1完成日期: 2007-4-9作者: Dajie Tan 1. GCC 内嵌汇编的基本格式asm("assembly code");如: asm("syscall"); //触发一个系统调用如果有多条指令,则需在指令尾部添加/t和/n,如: asm("li v0, 4011/t/n" "syscall");括号里的字符串 GCC 前端不作分析,直接传给汇编器 as ,故而原创 2007-04-09 18:15:00 · 4991 阅读 · 0 评论 -
oprofile for godson2e 移植手记
当前版本: 0.1完成日期: 2007-6-7作者: Dajie Tan 0. 概述oprofile 在Linux 上分两部分,一个是内核模块(oprofile.ko),一个为用户空间的守护进程(oprofiled)。前者负责访问性能计数器或者注册基于时间采样的函数(使用register_timer_hook注册之,使时钟中断处理程序最后执行profile_tick 时可以访问之),并采样置于内核原创 2007-09-06 10:38:00 · 1187 阅读 · 0 评论 -
MIPS Linux 下添加系统调用
添加一个系统调用有以下几个步骤: 1. 在 kernel 的系统调用表 sys_call_table 中添加你的系统调用入口 根据你用的内核位数(32/64bit) 选择需要修改的文件: arch/mips/kernel/scall32-o32.S ------> 32bit kernel arch/mips/kernel/scall64-64.S ------> 64bit原创 2007-09-06 09:57:00 · 2873 阅读 · 0 评论 -
福珑迷你PC之主板结构
其中 Local I/O 总线为: intel 风格的并行总线,8bit 数据, 19bit 地址,因此支持的最大存储空间是2^19 * 8/8 = 512KB存储PMON的flash memory(Am29LV040B)就通过 Local I/O 总线连接到北桥。原创 2007-09-04 16:18:00 · 1416 阅读 · 1 评论 -
32位模式下使用64位寄存器注意事项
1. 汇编环境龙芯2E平台32位OS模式下,要使用64位寄存器可以在汇编代码里直接 用,运算时使用d开头的指令(double-word, 64bit),作用于寄存器即可。如:dadd, dsub, dmult, dmultu, ddiv, dsll, dsrl, dsra 等等。访问存储器可以直接使用ld/sd, ldc1/sdc1使用这些指令前,先用伪操作 .set mips3 告诉汇编器下面的原创 2007-06-06 16:49:00 · 4254 阅读 · 1 评论 -
龙芯汇编语言编程(1)
当前版本: 0.1完成日期: 2007-3-22作者: Dajie Tan 1. Hello World从经典的Hello World开始: .text #表示将后面的代码编译后置于目标文件的.text段 .globl main #声明main为全局变量。该变量名会原创 2007-06-06 17:44:00 · 3911 阅读 · 2 评论 -
关闭龙芯2E 之 cache
PMON 加载kernel 时,是加载到 kseg0 的(通过在 arch/mips/Makefile 中: load-$(CONFIG_GODSONEV2E) += 0x80100000 指定),该地址空间是 unmaped cached 的,当 PMON 将控制权交给内核后,内核启动过程中cache 是打开的,但在跟踪内核的启动过程中,极易受 cache 的影响,每把断点设在有 cache 操原创 2007-06-06 17:04:00 · 1255 阅读 · 0 评论 -
龙芯2E平台程序性能分析
当前版本: 0.1完成日期: 2007-3-27作者: Dajie Tan 1. 分析一段代码的性能,最常用的方法是测量这段代码的运行时间。假如我要分析下面这两段代码的性能差异,可以在代码前后插入2个变量,分别记录运行前后的时间,相减即可:代码一: int matrix[2047][7];int main(){ int i, j, sum = 0; unsigned int beg原创 2007-06-06 16:59:00 · 1292 阅读 · 0 评论 -
MIPS 平台下 I/O 端口的读写--以龙芯为例
MIPS 下,I/O 端口是直接映射到地址空间的,不像x86下有专用的 I/O 空间,使用专用的 in/out 指令访问之。故而 MIPS 上访问 I/O 端口直接使用访存指令访问对应的地址即可。但是各种控制器的寄存器映射到地址空间的何处,具体的平台就不一样了。下面以龙芯2E为例说明之。龙芯2E 下使用 C语言读写 8259A 的 0x20 端口char *p_port;char data;p_p原创 2007-06-06 16:41:00 · 4114 阅读 · 0 评论 -
MIPS 汇编语言编程的艺术(龙芯适用)
分析系统调用的实现时看到这么一段代码,令人不禁拍案叫绝。 系统调用的参数传递,前4个参数通过a0~a3传,后面的参数要通过栈来传,目前内核 系统调用最长的参数个数为8。 用栈传递参数时,涉及到要将位于用户空间的参数先复制到内核空间(内核栈)。 因为系统调用的参数个数不定,因此就需要判断参数个数为5、6、7、8 不同情况时, 相应的复制操作个数。5个参数时需要复制个数为1,6个时为2,以此类推。原创 2007-05-09 13:13:00 · 3140 阅读 · 0 评论 -
RISC 下非对齐访问的问题
1. 问题RISC 下使用访存指令读取或写入数据单元时,目标地址必须是所访问之数据单元字节数的整数倍,这个叫做地址对齐。比 如在 MIPS 平台上,lh 读取一个半字时,存储器的地址必须是 2 的整数倍; lw 读取一个字时,存储器的地址必须是 4的整数倍; sd 写入一个双字时,存储器的地址必须是 8 的整数倍。倘若访存时,目标地址不对齐,则会引起异常,典型的是系统提示“总线错误”后,直接杀死进原创 2007-07-31 14:37:00 · 5479 阅读 · 1 评论 -
16KB页,32bit 地址的划分有些问题
32 bit kernel, 16KB 页大小,龙芯2E平台tlb_refill_handler为:lui k1, %hi(pgd_current)mfc0 k0, C0_BADVADDRlw k1, %lo(pgd_current)(k1)srl k0, k0, PGDIR_SHIFTsll k0, k0, PGD_T_LOG2原创 2007-10-11 13:59:00 · 1694 阅读 · 0 评论