getopt、getopt_long、getopt_long_only使用实例

现在开始慢慢学习下上层开发,因为要为底层写些工具。首先从命令行参数的过滤获取开始,有三个函数用来操作命令行参数,以前我获取命令行都是自己用argv和argc做个循环获取的,其中各种转换和判断有点繁琐。现在学习下这三个函数怎么使用,可以方便后期的开发;         在学习这三个函数之前先说明下:...

2015-08-24 21:34:53

阅读数:1454

评论数:0

长参数getopt_long()

getopt_long支持长选项的命令行解析,函数中的参数argc和argv通常直接从main()的两个参数传递而来 头文件 #include 函数原型 int getopt_long(int argc,char * const argv[],const char *optstring,con...

2015-08-17 23:40:34

阅读数:654

评论数:1

linux内核内存分配(三、虚拟内存管理)

vmalloc函数是驱动模块经常使用的内存分配函数,该函数返回的虚拟地址连续的(其实这也有疑问,因为上面vmalloc的虚拟地址区有4k分割地址,如果vmalloc分配的虚拟地址很大,那么中间是否有4kb的分割地址?),但是不保证所映射的物理地址也是连续的。它主要对上面的vmalloc_start...

2015-08-14 00:14:10

阅读数:3267

评论数:0

linux内核内存分配(二、struct slab和struct kmem_cache)

前一篇blog linux内核内存分配(一、基本概念) 主要是分析linux内核内存的分配和物理页分配函数接口。但是在实际的操作中,不一定所有内存申请都需要一个物理页,很多只是需要分配几K大小的内存就可以。所以就需要更小的内存分配函数。刚开始看这个有点不懂,不过懂了就很简单了。哈哈。       ...

2015-08-10 21:04:46

阅读数:3169

评论数:2

linux内核内存分配(一、基本概念)

首先大概的可以看出左边的mem_map数组中存放的是page结构体元素,中间的是实际的物理内存,右边的是虚拟的地址范围; 他们之间的关系大概是这样的,mem_map数组中的元素和物理内存页联系,page指针指向中间的物理内存中的某个物理页,这个关系是为了系统方便管理内存; ...

2015-08-05 22:12:37

阅读数:1733

评论数:0

PCIe 配置空间读写内核实现

1     PCI及PCI-E配置空间介绍    PCI-E是用来互联如计算和通信平台应用中外围设备的第三代高性能I/O总线。PCI-E采用了与PCI相同的使用模型和读写(load-store)通信模型,支持各种常见的事务,如存储器读/写、IO读/写和配置读/写事务。其存储器、IO和配置地址空间与...

2015-08-04 22:28:50

阅读数:6464

评论数:1

kthread_run函数

最近发现在内核创建线程的时候经常会用到kthread_run()这样的一个调用。于是准备拿出来学习一下。首先看看它的定义之处才发现它是一个宏函数,而不是一个真正意义上的函数。 在include/linux/Kthread.h里有 /** * kthread_run - create and wak...

2015-08-04 22:27:44

阅读数:636

评论数:0

Linux伙伴系统

(一)--伙伴系统的概述  Linux内核内存管理的一项重要工作就是如何在频繁申请释放内存的情况下,避免碎片的产生。Linux采用伙伴系统解决外部碎片的问题,采用slab解决内部碎片的问题,在这里我们先讨论外部碎片问题。避免外部碎片的方法有两种:一种是之前介绍过的利用非连续内存的分配;另外一种则是...

2015-08-04 22:27:07

阅读数:570

评论数:0

Linux内存管理--伙伴系统和内存分配器

Linux内核使用伙伴系统来解决内存分配引起的外部碎片问题。伙伴系统分配器大体上分为两类。__get_free_pages()类函数返回分配的第一个页面的线性地址;alloc_pages()类函数返回页面描述符地址。不管以哪种函数进行分配,最终会调用alloc_pages()进行分配页面。 为清楚...

2015-08-04 22:26:36

阅读数:1786

评论数:0

访问I/O内存和I/O端口设备

前面为了写pwm驱动,仔细研究了下I/O内存和I/O端口设备的区别,以及访问方式。不过,其实也没必要纠结这个了,因为现在绝大部分设备都使用I/O内存映射的。 I/O独立编址和I/O统一编址         首先有两个概念:I/O独立编址和I/O统一编址;记住这两种编址方式都是由CPU架构决定...

2015-08-04 22:25:50

阅读数:957

评论数:0

linux内核内存的详细分配

我们知道CPU所访问的都是虚拟内存地址。那么平时我们自己在编写的内核模块时,linux到底分配的是什么样的 内存空间呢?要解答这个问题,首先就要看看内核非连续内存。 在linux的内存管理中,用户使用0~3GB的地址空间,而内核只是用了3GB~4GB区间的地址空间,共1GB;非连 续空间的物理映射...

2015-08-04 22:23:40

阅读数:7542

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭