23、内核内存管理详解

内核内存管理详解

1. I/O端口访问

在完成区域预留后,可使用以下函数访问端口:

u8 inb(unsigned long addr)
u16 inw(unsigned long addr)
u32 inl(unsigned long addr)

这些函数分别用于读取8位、16位或32位大小的端口。还有用于写入数据的函数:

void outb(u8 b, unsigned long addr)
void outw(u16 b, unsigned long addr)
void outl(u32 b, unsigned long addr)

这些函数将8位、16位或32位的数据写入指定地址的端口。

PIO(Programmed I/O)使用不同的指令集来访问I/O端口或MMIO(Memory-Mapped I/O),这是一个缺点,因为PIO完成相同任务所需的指令比普通内存访问更多。例如,在MMIO中,1位测试只需一条指令,而PIO需要先将数据读入寄存器再进行位测试,这需要多条指令。

2. MMIO设备访问

MMIO设备的内存映射I/O与内存位于同一地址空间。内核使用通常由RAM使用的部分地址空间(实际上是HIGH_MEM)来映射设备寄存器,这样在该地址处就不是真正的内存(即RAM),而是I/O设备。因此,与I/O设备通信就像对专门用于该I/O设备的内存地址进行读写操作。

例如,如果需要访问i.MX6的IPU - 2分配的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值