上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 45 下一页

2011年5月22日

摘要: ARM体系结构中访问IO需使用驱动模块,可在模块初始化中使用 request_mem_region()函数申请IO内存,然后通过ioremap()函数对获得的IO内存进行重映射.如控制s3c2410的LED显示,使用GPF口,可用如下代码段进行访问#define GPF 0x56000000...static void * GPF_BASE; //一定要定义成void *型...if(request_mem_region(GPF,16,"GPF")!=NULL) //16为从地址GPF开始的16个字节{ GPF_BASE=ioremap(GPF,16); writel(0x 阅读全文
posted @ 2011-05-22 20:01 yming0221 阅读(155) 评论(0) 推荐(0)

2011年5月19日

摘要: head.s开始pg_dir.................org 0x1000pg0:.org 0x2000pg1:.org 0x3000pg2:.org 0x4000pg3:.org 0x5000后面是setup_paging代码setup_paging: movl $1024*5,%ecx /* 5 pages - pg_dir+4 page tables */ xorl %eax,%eax xorl %edi,%edi /* pg_dir is at 0x000 */ cld;rep;stosl movl $pg0+7,pg_dir /* set present bit/us... 阅读全文
posted @ 2011-05-19 22:25 yming0221 阅读(291) 评论(0) 推荐(0)
摘要: #include<stdio.h>#include<sys/types.h>#include<unistd.h>int main(){ pid_t pid,pid1; pid=fork(); pid1=fork(); sleep(1); if(pid>0) { if(pid1>0) printf("This is the parent process,my pid is %d/n",getpid()); else printf("This is the son2 process,my pid is %d,my fat 阅读全文
posted @ 2011-05-19 20:35 yming0221 阅读(1023) 评论(0) 推荐(0)
摘要: 这是简单的生产者消费者问题,只有一个缓冲区#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<linux/sem.h>struct sembuf buf;int Psem(int sem_id);int Vsem(int sem_id);int cache;int main(){ union semun arg; int mutexid; int full_sem; int empty_sem; mutexid=semget(IPC_PRIVATE,1,0666|IPC 阅读全文
posted @ 2011-05-19 20:29 yming0221 阅读(265) 评论(0) 推荐(0)
摘要: ubuntu10.10以后,启动方式改成了基于事件的启动方式,Upstart,代替以往的init.d/rcX.d的线性启动方式,采用事件的并行,并发执行,有助于加快启动速度。Upstart init daemon 是基于事件的,当系统中的什么情况发生变化时,它会运行某个特定的程序.这里被运行的程序多半是用来启动或终止服务的脚本.这个配置方式和systemv 在系统进入某个运行级别的时候运行init脚本的链接的概念实际上是非常类似的,只不过 upstart 更加灵活一些.Upstart 不仅能在运行级别改变的时候启动或终止服务,也能在接收到系统发生其他改变的信息的时候启动或终止服务.这些系统的改 阅读全文
posted @ 2011-05-19 14:53 yming0221 阅读(130) 评论(0) 推荐(0)

2011年5月17日

摘要: head.s被编译成system模块的最前面部分,故而称为头部。这段程序处于地址的绝对0处,首先是加载各个数据段寄存器,重新设置中断描述符表 idt,共 256 项,并使各个表项均指向一个只报错误的哑中断程序。然后重新设置全局描述符表 gdt。接着使用物理地址 0 与 1M 开始处的内容相比较的方法,检测 A20 地址线是否已真的开启(如果没有开启,则在访问高于 1Mb 物理内存地址时 CPU 实际只会访问(IP MOD,如果检测下来发现没有开启,则进入死循环。然后程序测试 PC 机是否含有数学1Mb)地址处的内容)协处理器芯片(80287、80387 或其兼容芯片),并在控制寄存器 CR0 阅读全文
posted @ 2011-05-17 23:17 yming0221 阅读(293) 评论(0) 推荐(0)

2011年5月16日

摘要: 1981 年 8 月,IBM 公司最初推出的个人计算机 IBM PC 使用的 CPU 是 Intel 8088。在该微机中地址线只有 20 根(A0 – A19)。在当时内存 RAM 只有几百 KB 或不到 1MB 时,20 根地址线已足够用来寻址这些内存。其所能寻址的最高地址是 0xffff:0xffff,也即 0x10ffef。对于超出 0x100000(1MB)的寻址地址将默认地环绕到 0x0ffef。当 IBM 公司于 1985 年引入 AT 机时,使用的是 Intel 80286 CPU,具有 24 根地址线,最高可寻址 16MB,并且有一个与 8088 完全兼容的实模式运行方式。然 阅读全文
posted @ 2011-05-16 12:49 yming0221 阅读(218) 评论(0) 推荐(0)

2011年5月14日

摘要: setup的整体作用:首先利用BIOS中断读取机器的数据,将其保存在地址0x9000:0x0000处,覆盖了原来bootsect.s代码所在的位置,由于bootsetc模块的代码运行完毕,已经没有其他的用处了,所以可以将其覆盖掉。然后关闭中断,setup将system模块整体移动至内存起始处,原来位于0x1000:0x0000,由于movsb和movsw指令的功能是移动一个字节或者一个字,源地址由寄存器ds:si指定,目的地址由es:di指定。指令cld指明di和si的方向是递增,而std是递减。由于system模块大小超过64K(实模式一个段的最大偏移),而移动指令需要指明段寄存器,所以需要 阅读全文
posted @ 2011-05-14 19:19 yming0221 阅读(360) 评论(0) 推荐(0)

2011年5月12日

摘要: 在Protected Mode下,一个重要的必不可少的数据结构就是GDT(Global Descriptor Table)。为什么要有GDT?我们首先考虑一下在Real Mode下的编程模型:在Real Mode下,我们对一个内存地址的访问是通过Segment:Offset的方式来进行的,其中Segment是一个段的Base Address,一个Segment的最大长度是64 KB,这是16-bit系统所能表示的最大长度。而Offset则是相对于此Segment Base Address的偏移量。Base Address+Offset就是一个内存绝对地址。由此,我们可以看出,一个段具备两个因素 阅读全文
posted @ 2011-05-12 17:11 yming0221 阅读(331) 评论(0) 推荐(0)
摘要: 升级UBUNTU11.04后一直搜索不到无线网络,用自带的驱动无法工作,也试过好多方法,自己编译wl,还是失败。最后解决方法Add a "contrib" component to/etc/apt/sources.list, for example:# Debian Squeeze/6.0 deb http://ftp.us.debian.org/debian squeeze main contrib non-freeUpdate the list of available packages and install thewireless-toolspackage:sudo 阅读全文
posted @ 2011-05-12 14:30 yming0221 阅读(175) 评论(0) 推荐(0)
上一页 1 ··· 19 20 21 22 23 24 25 26 27 ··· 45 下一页

导航