- 博客(27)
- 资源 (6)
- 收藏
- 关注
转载 linux设备驱动程序学习笔记——分配内存
SLAB动态内存管理内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:最小化管理内存所需的时间最大化用于一般应用的可用内存(最小化管理开销)内存管理实际上是一种关于权衡的零和游戏。您可以开发一种使用少量内存进行管理的算法,但是要花费更多时间来管理可用内存。也可以开发一个算法来有效地管理内存,但却要
2011-10-21 14:32:59
389
原创 linux设备驱动学习笔记——重要的一些概念
引用书中原话:close和release 并不是每一个close系统调用都会引起对release方法的调用。只有那些真正释放设备数据结构的close调用才会调用这个方法。内核对每个file结构维护其被使用多少次的计数器。无论是fork还是dup,都不会创建新的数据结构(仅有open创建),它们只是增加已有结构中的计数。只有在file结构的计数归0时,close系统调用才会执行releas
2011-10-19 11:01:18
425
原创 linux设备驱动程序学习笔记——container_of宏
在open函数中,int (*open) (struct inode *inode,strcut file *flip); inode->i_cdev结构包含了我们在注册时配置的cdev结构,但是我们实际真正需要的是包含cdev结构的scull结构,在open中,我们应当获得这个
2011-10-19 10:49:39
537
转载 linux设备驱动程序学习笔记——主次设备号
register_chrdev_region()和registe_chrdev() 分配设备编号,注册设备与注销设备的函数均在fs.h中申明,如下:extern int register_chrdev_region(dev_t, unsigned, const cha
2011-10-19 09:50:24
1234
原创 DM365 NOR支持
经过一番printk,终于把DM365的NOR支持搞定,分区信息终于出来了。 下面是几点小结: 1. 按照TI wiki的介绍,配置好内核,对于NOR的MTD驱动,改写OMAP的NOR就可以了,里面把一些板子相关的参数修改一下即可。 2. 注意的是在do_map_probe中,第一个参数要用”CFI_PROBE”,按照原来的程序会出现空指针问题,应该是我在配置platform_device的时候有些参数没有写全的原因。 3. 不要添加PHYSMAP的支持,添加该支持后,在request_mem_re
2011-03-29 21:21:00
630
原创 U-BOOT支持MMC
昨晚的事情让我决定不管学到什么知识,哪怕再小的,都要及时的记录下来,现在的脑子怎么这么不好使,才几天就忘了。 MMC的支持,主要就几个地方。 1.改写atmel_mci.c文件,里面的几个函数都是和FAT文件系统函数相关联的。具体的做法是把TI的SD卡测试程序里面的读写函数进行小规模的修改,变成atmel_mci.c文件里面的形式。 2. 研究一下FAT文件系统的文件命令。发现其实FAT文件系统挺简单的,最小单位是簇,一个簇包含几个物理块,文件的存放通过类似于链表的形式,有一个头指针(目录表),指向下
2011-03-25 10:40:00
1267
原创 Linux 线程和进程
今天在写应用层程序的时候,按照IPNC的指导手册,要想调用某个函数,首先要初始化这个模块。原话如下: Before we start to use the GetAVData, we have to initial the message driver and setup the memory for tranferring the encoded data。 void Init_Interface(int Msg_id) { int qid
2011-03-21 17:38:00
752
原创 U-BOOT配置编译全过程
<br />原文:<br />http://bebread2.juliantec.info/julblog//post/5/15
2011-03-11 15:17:00
473
原创 U-BOOT移植——支持Davinci的MMC
<br />下面是这两天看SD标准和365资料进行的小结,下一步对U-BOOT添加MMC支持。让悲剧的网卡见鬼去吧。<br />1. MMC/SD是两种不同的格式,SD比MMC要高级,可以兼容MMC,并且速度要快。软件区分SD还是MMC,靠CMD1和CMD41,前者只有SD卡支持,后者只有MMC支持,发出一条命令,谁成功返回,对应的就是什么卡。<br />2. Response是CPU发出CMD之后,SD/MMC通过CMD信号线串行返回的数据,包括卡状态等等信息。对于MMC/SD来说
2011-03-11 15:16:00
1353
转载 堆与栈有什么区别?
<br />堆与栈有什么区别?<br /><br />一、预备知识—程序的内存分配<br /><br />一个由c/C++编译的程序占用的内存分为以下几个部分<br /><br />1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。<br />2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。<br />3、全局区(静态区)(static
2011-03-11 15:16:00
318
转载 调试 日记
<br />开学到现在一直在调的365,现在U-BOOT已经跑起来了,把最近学到的东西进行一下小结。<br />1.ARM内部的RAM,又称为紧耦合存储器(TCM),TCM的启用必须要通过一定的设置。当选择非NOR启动的时候,启动引脚自动配置该设置,故测试合众达板子的时候IRAM总是可以运行的。在NOR启动的时候必须在NOR中开启TCM,用到的指令可以查看ARM926EJ-S的手册,TI的那份手册错了。<br />2.365的UART1的输入时钟并不是24MHz,而是PLL1的DIV4,这点TI自己都没有搞
2011-03-11 15:15:00
444
转载 linux支持NTFS
<br />ntfs-3g是一个用于读写NTFS分区的用户态文件系统(FUSE)。<br />优点是支持NTFS的完美读写,安装/配置简单,而且已经进入Fedora Extras。<br />缺点是因为是用户态文件系统,所以大量IO有明显的CPU资源占用。<br />步骤:<br />1、安装fuse,http://fuse.sourceforge.net/,不要安装最新版本,最新版中fuse被编入了系统内核中,不再作为模块加载,这样会使的ntfs-3g无法使用。本人下载的是fuse-2.7.3.tar.g
2011-03-11 15:15:00
499
原创 linux设置时间
<br />1.1.1 设 置系统日期和 <br /><br />可以使用下列 修改系统时间: 内容来自bnxb.com<br /># date {mmddhhmiyyyy.ss} 起源网bnxb.com<br /> <br />mm--代 表月份 <br /> <br />dd--代 表日期 <br /> <br /> <br />hh--代 表 24 小时制的小时 <br /> <br />mi--代 表分钟 bnxb.com<br />yyyy--代 表年 <br />ss--代 表秒<br /> <
2011-03-11 15:14:00
1979
转载 linux等待队列
<br />Linux内核的等待队列(转载) <br />Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。在Linux2.4.21中,等待队列在源代码树include/linux/wait.h中,这是一个通过list_head连接的典型双循环链表,如下图所示。 <br /><br />在这个链表中,有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待队列项中都包含一个lis
2011-03-11 15:12:00
302
转载 linux中断
<br />http://hi.baidu.com/zhanghaooy/blog/item/e2e7be09a3700aa62eddd43d.html
2011-03-11 15:10:00
232
原创 .configure编译中常见的错误
原文:http://blog.sina.com.cn/s/blog_5d9c20070100g2bm.html<br /><br />$ sudo aptitude install scim-qtimm 解决eva 下无法使用 scim输入法的问题(1)sudo ./configure --prefix=/usr 之后出现一下错误:checking how to run the C++ preprocessor... /lib/cppconfigure: error: C++ preprocessor "/
2011-03-11 15:09:00
729
原创 自己写的alarm_cond
<br /> <br />#include<stdio.h><br />#include"errors.h"<br />#include<pthread.h><br />#include<time.h><br />typedef struct alarm_tag{<br />int seconds;<br />time_t alarm_time;<br />char message[64];<br />struct alarm_tag *link;<br />}alarm_
2011-03-11 15:08:00
431
原创 scanf()
<br />scanf()函数的控制串<br />函数名: scanf <br />功 能: 执行格式化输入<br />用 法: int scanf(char *format[,argument,...]); <br />scanf()函数是通用终端格式化输入函数,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。<br />其调用格式为: scanf("<格式化字符串>",<地址表>); <br />scanf()函数返回成功赋值的数据项数,出错时则返回
2011-03-11 15:07:00
332
转载 sscanf()
<br />头文件 #include<stdio.h><br />定义函数 int sscanf (const char *str,const char * format,........);<br />函数说明 sscanf()会将参数str的字符串根据参数format字符串来转换并格式化数据。格式转换形式请参考scanf()。转换后的结果存于对应的参数内。<br />返回值 成功则返回参数数目,失败则返回-1,错误原因存于errno中。<br />范例 #include<stdio.h> <br />m
2011-03-11 15:06:00
1280
转载 pthread_join pthread_exit pthread_detach
<br />pthread_join pthread_exit <br /><br />函数pthread_join用来等待一个线程的结束。函数原型为:<br /> extern int pthread_join __P ((pthread_t __th, void<br />**__thread_return));<br /><br /> 第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的函数将<br />
2011-03-11 15:05:00
894
转载 条件变量
<br />1. 相关函数 <br /> #include <pthread.h><br /> pthread_cond_t cond = PTHREAD_COND_INITIALIZER;<br /> int pthread_cond_init(pthread_cond_t *cond
2011-03-11 15:05:00
290
转载 进程上下文和中断上下文
<br />进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。<br />处理器总处于以下状态中的一种:<br />1、内核态,运行于进程上下文,内核代表进程运行于内核空间;<br />2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;<br />3、用户态,运行于用户空间。<br />用户空间的应用程序,通
2011-03-11 15:04:00
637
原创 loaders& linkers
<br />今天把chinalinux翻译的loaders & linkers 大致翻了一下,想找到一些关于前两天编译调试中的问题,总算是有点收获的。<br />.text .data .bss这三个大段都是由各目标文件的相应段组合而成的。在写链接脚本文件的时候,以下面这个为例吧。<br />SECTIONS {<br /> . = 0x30000000;<br /> .text : { *(.text) }<br /> .rodata ALIGN(4) :
2011-03-11 15:03:00
489
原创 NAND FLASH操作学习笔记
<br />首先是几个C语言的学习点。<br />1.利用一个函数结构体,来保存某一类的函数首地址,一个很好的编程技巧,可以使程序可读性增加。做法是:<br />typedef struct {<br /> void (*nand_reset)(void);<br /> void (*wait_idle)(void);<br /> void (*nand_select_chip)(void);<br /> void (*nand_deselect_chip)(void);<br />
2011-03-11 15:01:00
902
转载 Static 作用详述
Static 作用详述<br />1.先来介绍它的第一条也是最重要的一条:隐藏<br /> 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是a.c,另一个是main.c.<br />下面是a.c的内容: char a = 'A'; // global variable void msg() { printf("Hello/n")
2011-03-11 13:49:00
294
转载 结构体中的指针函数以及“结构体”的继承
转载自 herowuking最终编辑 herowuking结构体中的指针函数以及“结构体”的继承<br /><br />#include <stdio.h><br />#include <stdlib.h><br /><br />struct Fruit<br />{ <br />void (*output)(void);<br />int i;<br />};<br /><br />struct Apple<br />{<br />struct Fruit n;<br />void (*output)(v
2011-03-11 13:44:00
1022
自适应算术编码VC代码,可直接运行
2012-03-13
Programming_with_Posix_Threads 书中的源代码
2011-03-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人