摘要:
总的说来,字符设备驱动程序的实现包含两个大的方面,所以分2篇来讨论。 这两个个方面分别为:设备注册与驱动加载、字符设备的内部实现(个人分类,仅作参考)一、设备的创建 1)原程序中dev_t devno = MKDEV(globalmem_major, 0); //加载函数中对MKDEV的调用 2)索引的函数/include/linux/kedev_t.h#define MINORBITS 20#define MKDEV(ma,mi) (((ma) << MINORBITS) | (mi)) 3)这是一个创建设备的函数,也算不上一个函数,可以看成一个运算:将ma(j... 阅读全文
2013年1月19日
摘要:
CTDIY means Copy to DIY. 首先来copy一个例程来试试字符设备到底是如何//globalmem.c 本例程来源于《linux设备驱动开发详解》#include<linux/module.h>#include<linux/types.h>#include<linux/fs.h>#include<linux/errno.h>#include<linux/mm.h>#include<linux/sched.h>#include<linux/init.h>#include<linux/cd 阅读全文
2013年1月18日
摘要:
1、若是在win7下,先安装win7下的驱动再分配USB端口给虚拟机(略过) 2、不管是在虚拟机还是纯linux中,先下载minicomsudo apt-get install minicom 3、minicom中的设置lsmod | grep pl2303//首先查看pl2303驱动是否正确安装,在ubuntu下,接入接口则自动安装ls /dev | grep ttyUSB*//查看所使用的设备端口,在我电脑上显示为ttyUSB0//以下进入minicom设置sudo minicom -s//选择serial port setup,按下A,将端口改为ttyUSB0(按个人情况)//双... 阅读全文
2013年1月16日
摘要:
linux内存管理的任务 1)组织规划整个系统的物理和虚拟存储空间分布; 2)为虚拟存储空间(线性地址空间)建立页表,即建立虚拟地址到物理地址的映射关系; 3)设置不同存数空间的访问控制属性,保护系统存储空间不被非法访问; 4)内存分配和释放。1 linux中的物理和虚拟存储空间的分布 支持MMU的32位微处理器上,linux物理存储空间和虚拟存储空间寻址范围都是0x0000_0000~0xFFFF_FFFF,为4GB。 但是linux运行在虚拟存储空间中,而实际使用中将远小于4GB的物理内存映射为虚拟内存的4GB。 物理存储空间分布(引用《嵌入式系统linux内核开发实战指南(... 阅读全文
摘要:
1 struct pglist_data pg_data_ttypedef struct pglist_data { struct zone node_zones[MAX_NR_ZONES]; struct zonelist node_zonelists[MAX_ZONELISTS]; int nr_zones;#ifdef CONFIG_FLAT_NODE_MEM_MAP /* means !SPARSEMEM */ struct page *node_mem_map;#ifdef CONFIG_CGROUP_MEM_RES_CTL... 阅读全文
摘要:
1 struct per_cpu_pagesetstruct per_cpu_pageset { struct per_cpu_pages pcp;#ifdef CONFIG_NUMA //NUMA系统专用 s8 expire;#endif#ifdef CONFIG_SMP s8 stat_threshold; s8 vm_stat_diff[NR_VM_ZONE_STAT_ITEMS];#endif}; 2 struct per_cpu_pagesstruct per_cpu_pages { i... 阅读全文
2013年1月15日
摘要:
struct page { unsigned long flags; /* Atomic flags, some possibly * updated asynchronously */ atomic_t _count; /* Usage count, see below. */ union { atomic_t _mapcount; /* Count of ptes mapped i... 阅读全文
2013年1月14日
摘要:
linux内存管理 嵌入式处理器的分页管理为二级映射,内存空间与I/O空间统一编址,而x86处理器采用三级映射,内存空间与I/O空间独立编址。 在32位嵌入式系统中,存储空间的地址范围从0x0000_0000到0xFFFF_FFFF,内存和I/O共享从这4GB地址空间范围。 其主要包含以下几种存储空间: 1)设备空间(MT_DEVICE):二级分页 2)内部高速SRAM空间(MT_CACHECLEAN):一级分段 3)内部mini cache空间(MT_MINICLEAN):一级分段 4)低端中断向量(MT_LOW_VECTORS):两级分页 5)高端中断向量(MT_HIGH_... 阅读全文
2013年1月12日
摘要:
第三章 进程进程、轻量级进程和线程 进程定义:进程是程序执行是的一个实例 从内核观点看,进程的目的就是担任分配系统资源(CPU时间、内存等)的实体在linux源代码中,常将进程成为任务(task)或线程(thread) Linux早期版本中,父子进程间只能通过数据拷贝来实现进程数据保护。 Linux现在使用轻量级进程(LWP/LightWeight Process)对多线程应用程序提供更好的支持。两个轻量级进程可以共享一些资源,诸如地址空间、打开的文件等。 只要轻重一个修改共享资源,另一个马上能看到这种修改。 当然,当两个线程访问共享资源是就必须同步它们自己。 进程描述符都是task str. 阅读全文
2013年1月11日
摘要:
第二章 内存寻址物理地址 logical address 由段地址(segment)和偏移量(offset)构成。线性地址/虚拟地址 linear/virtual address 32位无符号整数0x0000 0000 – 0xffff ffff 寻址4GB。物理地址 physical address 32位或36位无符号整数表示。 内存控制单元(Memorty Management Unit/MMU)通过一种称为分段单元(Segmentation Unit)的硬件电路把一个逻辑地址转换成线性地址;接着,第二个称为分页单元(Paging Unit)的硬件电路吧线性地址转换成一个物理地址。附录一 阅读全文