linux的api
⑴ linux api是linux操作系统直接提供的函数接口。对的还是错的
Linux系统提供三种接口:
1、图形界面操作接口,Linux系统一般提供KDE、Gnome等图形界面接口,目的是方便普通用户操作计算机。
2、控制台接口,即终端接口,Linux系统一般提供bash shell、cshell等等终端接口,目的是方便系统管理员操作计算机,事实上Linux功能的强大也主要体现在终端接口。
3、API接口:即apllication interface,这是应用程序接口,从编程角度Linux系统就是一个大的程序调用库,它提供大量的API函数,目的是方便程序员开发应用程序。
⑵ Linux kernel scatterlist API介绍
前言:我们常在处理大量数据交互的子系统,如MMC、Video、Audio中,看到scatterlist的身影。这个术语在非英语母语环境中初见时,常让人一头雾水。然而,如果将术语“物理内存”与scatterlist结合,问题便迎刃而解。scatterlist实则是物理内存的列表,将分散的物理内存以有序方式组织在一起。接下来,将阐述其实际用途。
scatterlist产生的背景:与MMU(内存管理单元)的引入紧密相关。在引入MMU后,软件需要处理虚拟地址与物理地址之间的转换。但在某些情况下,如通过DMA(直接内存访问)控制器将数据从一个模块移至另一个,物理地址的不连续性成为问题。scatterlist在此背景下诞生,作为物理地址的有序列表,用于描述不连续物理内存块的起始地址、长度等信息。多个scatterlist组合形成一个表,如struct sg_table,可以完整描述虚拟地址空间。scatterlist作为各种映射空间(如VA、PA、DA等)的通用媒介,实现不同映射空间之间的转换。
scatterlist API介绍:scatterlist用于描述物理地址上连续的内存块,其定义在“include/linux/scatterlist.h”中。它包含page_link、offset、length、dma_address和dma_length等字段,分别表示内存块所在页面、偏移量、长度、物理地址及长度。struct sg_table作为辅助数据结构,用于存储scatterlist数组的指针和有效内存块个数,简化使用者的操作。
scatterlist的使用规则:数组中有效内存块的确定由两个规则指导:如果page_link的bit0为1,表示该scatterlist为链表的一部分;如果bit1为1,则表示为数组的最后一个有效内存块。理解这一规则后,可以更好地利用scatterlist API,如获取物理地址和长度、判断链表状态、分配和设置页面等。
API介绍:scatterlist API包括获取物理地址和长度(sg_dma_address、sg_dma_len)、判断链表状态(sg_is_chain、sg_is_last)、获取页面信息(sg_assign_page、sg_set_page、sg_page)、分配缓冲区(sg_set_buf)、遍历数组(for_each_sg)、捆绑链表(sg_chain)、标记结束状态(sg_mark_end、sg_unmark_end)等功能。这些API简化了内存操作流程,使得数据在不同映射空间间高效转换。