内核定时器的详细说明?
系统移植中在开发板上设置应用程序自启动。
应用程序通过设备文件和驱动建立联系,而设备文件又通过主设备号与驱动联系。
在动态获取设备号时先加载驱动再创建设备节点。
应用层mmap系统调用:
mmap实现将文件内容映射到内存空间的某块地址上,通过对这块内存空间的操作来实现对文件的操作,而不需要再调用read和write等操作。
一、
void* mmap(void* addr,size_t len,int port,int flags,int fd,off_t offset);
//addr:指定映射到内存的起始位置,
// len:指定映射到内存的长度
//prot:映射区的保护方式-- PROT_EXEC:映射区可执行
// PROT_READ:映射区可读
// PROT_WRITE:映射区可写
// PROT_NONE:映射区不能存取
//flags:映射区的特性--MAP_SHARED:写入映射区的内容会复制回文件,而
// 且允许其他映射该文件的进程共享;
//
// MAP_PRIVATE:对映射区的写操作会产生一个映区
// 的复制(copy—on-write),对此区域的修改不会写会原文件。
//fd:open对应的文件描述符
//offset:在文件中要映射的起始位置,必须是分页大小的整数倍,一般为零,
// 表示从文件的头开始映射。
//注意:
//在使用mmap进行文件和内存之间的映射之后,当我们在对内存中拷贝数据(亦即对文件写)时,所拷贝到文件中的数据并且最后能保存下来的数据的长度不能超过原来文件中的长度。比如原来文件中的内容为“1234567”,映射后往内存中写“Buf is Null”之后,保存到文件中的数据是“Buf is N”。
二、
解除映射:
int munmap(void* start , size_t length);
//取消从start开始的长度为length的映射的内存。如果用户没有解除映射,在
//进程结束时系统会自动解除,但关闭文件描述符是不会自动解除映射。
- 虚拟内存:
虚拟内存是进程的虚存的一块同质空间,具有同样许可标志的连续的许可范围,可以理解为“具有自己属性的内存对象”。一个进程的内存映像又以下几个部分组成:地址由低到高为—-<0~3G>代码段、数据段(已初始化的数据段、未初始化的BSS段)、堆、内存映射区、栈、环境变量、命令行参数。<3~4G>内核空间。[注:这里我们主要实现在驱动中对内存的映射。一个进程的内存区可通过/proc/pid/maps来查看,pid是对应的进程号]。