首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

操作系统生磁盘的使用---18

;} void hd_out(drive, nsect, sec, head, cyl, cmd...){ port = HD_DATA; //数据寄存器端口(0x1f0) //需要连续读取几个扇区 outb_p...(nsect,++port); //哪个扇区 outb_p(sect,++port); //哪个柱面 outb_p(cyl,++port); outb_port(cyl>>8,++port); //哪个磁头...outb_p(0xA0|(drive<<4)|head, ++port); outb_p(cmd, ++port); } 实际代码书写就是找到磁盘控制器对应的端口位置,然后将要操作的柱面,磁头,扇区位置...void make_request(){ struct requset *req; req=request+NR_REQUEST; //根据盘块号计算出扇区号---从b_blocknr<<1可以知道Linux...0.11中盘块号和扇区的映射关系 //0---->0 //1----->2 //2----->4 //可以看到在linux 0.11中一个盘块对应两个连续的扇区 req->sector=bh->b_blocknr

87210

操作系统内核中的初始化工作

看完了进入内核前的工作后,我网络编程课的抄写作业自然是可以圆满完成啦,不过看了一部分后觉得确实很有意思,所以也是决定继续看下去,并且计划看完linux源码后跟着MIT6.s081写一个小的操作系统内核,...诶这个时候我们是不是又会想起来在进入Linux内核前的准备一文中提到过的INT指令,例如INT 0x80这个指令就是相当于直接告诉CPU中断号0x80。...那至于这里提到的中断描述符表IDT,我们也在进入Linux内核前的准备一文中设置GDT这一段中提到过啦,IDT从idtr寄存器中可以找到,而idt这个表采用的是一个结构体数组的方式进行存储,对应的内容就是上面提到的段选择子和段内偏移地址啦...再接下来是一些我们之前提到过的outb_p()和set_intr_gate()函数,四行outb_p()用于从端口读写,两行set_intr_gate()设置系统中断。...outb_p(0x36,0x43); /* binary, mode 3, LSB/MSB, ch 0 */ outb_p(LATCH & 0xff , 0x40); /* LSB */ outb(LATCH

66130

嵌入式Linux系统是如何管理IO端口以及IO内存的呢?老司机给你讲讲

“ 五、Linux下访问IO端口 对于某一既定的系统,它要么是独立编址、要么是统一编址,具体采用哪一种则取决于CPU的体系结构。...outb( )、outw( )、outl( ) 分别向一个I/O端口写入1、2或4个连续字节。...outb_p( )、outw_p( )、outl_p( ) 分别向一个I/O端口写入1、2或4个连续字节,然后执行一条“哑元”指令使CPU暂停。...“ 六、Linux下访问IO内存请输入标题 IO内存的访问方法是:首先调用request_mem_region()申请资源,接着将寄存器地址通过ioremap()映射到内核空间的虚拟地址,之后就可以Linux...最后来看一下ioread8的源码,其实现也就是对虚拟地址进行了判断,以区分IO端口和IO内存,然后分别使用inb/outb和readb/writeb来读写。 ?

1.7K21
领券