SunBo

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 32 下一页

2010年12月22日

摘要: 了解linux的内存模型,或许不能让你大幅度提高编程能力,但是作为一个基本知识点应该熟悉。坐火车外出旅行时,即时你对沿途的地方一无所知,仍然可以到达目标地。但是你对整个路途都很比较清楚的话,每到一个站都知道自己在哪里,知道当地的风土人情,对比一下所见所想,旅程可能更有趣一些。类似的,了解linux的内存模型,你知道每块内存,每个变量,在系统中处于什么样的位置。这同样会让你心情愉快,知道这些,有时还会让你的生活轻更松些。看看变量的地址,你可以大致断定这是否是一个有效的地址。一个变量被破坏了,你可以大致推断谁是犯罪嫌疑人。Linux的内存模型,一般为:地址作用说明>=0xc000 0000内 阅读全文
posted @ 2010-12-22 09:44 SunBo 阅读(2041) 评论(0) 推荐(0) 编辑

摘要: 共享内存共享内存是进程间通信中最简单的方式之一。共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。 快速本地通信 因为所有进程共享同一块内存,共享内存在各种进程间通信方式中具有最高的效率。访问共享内存区域和访问进程独有的内存区域一样快,并不需要通过系统调用或者其它需要切入内核的过程来完成。同时它也避免了对数据的各种不必要的复制。 因为系统内核没有对访问共享内存进行同步,您必须提供自己的同步措施。例如,在数据被写入之前不允许进程从共享内存中读取信息、不允许... 阅读全文
posted @ 2010-12-22 09:43 SunBo 阅读(375) 评论(0) 推荐(0) 编辑

摘要: 什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只不过说话的主角变成了Linux。当某些比较致命的问题出现时,我们的Linux内核也会抱歉的对我们说:“哎呦(Oops),对不起,我把事情搞砸了”。Linux内核在发生kernel panic时会打印出Oops信息,把目前的寄存器状态、堆栈内容、以及完整的Call 阅读全文
posted @ 2010-12-22 07:41 SunBo 阅读(333) 评论(0) 推荐(0) 编辑

2010年12月21日

摘要: 一 Linux device driver的概念系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件, 应用程序可以象操作普通文件一样对硬件设备进行操作。设备驱动程序是内核的一部分,它完成以下的功能: 1 对设备初始化和释放。2 把数据从内核传送到硬件和从硬件读取数据。3 读取应用程序传送给设备文件的数据和回送应用程序请求的数据。4 检测和处理设备出现的错误。在Linux操作系统下有两类主要的设备文件类型,一种是字符设备,另一种是块设备。字符设备和块设备的主要... 阅读全文
posted @ 2010-12-21 09:37 SunBo 阅读(327) 评论(0) 推荐(0) 编辑

2010年12月20日

摘要: __attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。__attribute__书写特征是:__attribute__前后都有两个下划线,并切后面会紧跟一对原括弧,括弧里面是相应的__attribute__参数。__attribute__语法格式为:__attribute__ ((attribute-list))其位置约束为:放于声明的尾部“;”之前。函数属性(Function Attribute)函数属性可以帮助开发者把一些特性添加到函数声明中,从而可以使编译器在错误检查 阅读全文
posted @ 2010-12-20 10:29 SunBo 阅读(5870) 评论(0) 推荐(0) 编辑

摘要: 在某论坛上看到一篇帖子,上面贴着嵌入式linux开发板启动时的有关信息,然后大家在帖子里讨论着这个启动过程中出现的问题,随机举例如下:Linux version 2.4.20-uc0 (root@Local) (gcc version 2.95.3 20010315 (release)(ColdFire patches - 20010318 from http://f (uClinux XIP and shared lib patches from http://www.snapgear.com/)) #20 三 6月 1 8 00:58:31 CST 2003 Processor: Sams 阅读全文
posted @ 2010-12-20 07:21 SunBo 阅读(2166) 评论(0) 推荐(0) 编辑

2010年12月10日

摘要: 对于多线程应用程序,如果能够给每个线程命名,那么调试起来的便利是不言而喻的。 今天看LWN上的周报,看到有人正在给prctl添加给进程内其它线程命名的接口,并从中得知,给线程自身命名的接口已经存在,不由窃喜,遂写下以下验证代码:#include #include #include void* tmain(void *arg) { char name[32]; prctl(PR_SET_NAME, (unsigned long)"xx"); prctl(PR_GET_NAME, (unsigned long)name); printf("%s/n", na 阅读全文
posted @ 2010-12-10 05:48 SunBo 阅读(9292) 评论(0) 推荐(3) 编辑

摘要: 最近遇到个问题,需要写个测试程序,从用户态读取DM365里寄存器的数据。有两个方案:1.自己写个驱动,提供个ioctl的接口,提供读取寄存器数据的功能2.通过mmap(),读取寄存器内容方案一太过麻烦,本身需要的只是个小的测试程序,实现驱动工作量太大了,所以采用方案2.关于mmap的内容网上已经有很多了,这里进行下大概的介绍:头文件:原型: void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offsize);返回值: 成功则返回映射区起始地址, 失败则返回MAP_FAILED(-1).参数:addr 阅读全文
posted @ 2010-12-10 02:31 SunBo 阅读(3012) 评论(0) 推荐(0) 编辑

2010年12月7日

摘要: 一.声明 虽然Linux的核心代码大部分是用C语言编写的,但是不可避免的其中还是有一部分是用汇编语言写成的。有些汇编语言代码是直接写在汇编源程序中的,特别是Linux的启动代码部分;还有一些则是利用gcc的内嵌汇编语言嵌在C语言程序中的。这篇文章简单介绍了gcc中的内嵌式汇编语言,主要想帮助那些才开始阅读Linux核心代码的朋友们能够更快的入手。 写这篇文章的主要信息来源是GNU的两个info文件:as.info和gcc.info,如果你觉得这篇文章中的介绍还不够详细的话,你可以查阅这两个文件。当然,直接查阅这两个文件可以获得更加权威的信息。如果你不想被这两篇文档中的一大堆信息搞迷糊的话,我. 阅读全文
posted @ 2010-12-07 08:51 SunBo 阅读(311) 评论(0) 推荐(0) 编辑

2010年12月6日

摘要: 要先加个用户名,再设置密码。其实SMB可以使用用户名列表,具体的吗,不怎么好说清楚,就是说SMB服务器可以设置账号映射,就是说SMB用户可以不是系统用户在SMB.conf文件中可以开启用户账号映射, 方法: 先打开smb.conf这个文件,找到:username map =/etc/samba/smbusers 这一项把前面的分号去掉,记住username map= 后面的路径然后手动的编辑这个文件使用命令:vi /etc/samba/smbusers 这个命令是编辑 username map 所指定的那个文件在这个文件里面添加虚拟用户名如 root administrator admin 这 阅读全文
posted @ 2010-12-06 06:44 SunBo 阅读(1938) 评论(0) 推荐(0) 编辑

上一页 1 ··· 8 9 10 11 12 13 14 15 16 ··· 32 下一页