12 2015 档案

摘要:线程安全终止 取消一个线程的方式是向其发送pthread_cancel信号。目标线程接收到这个信号之后会采取动作,具体的动作取决于线程开始时以下几个函数的设定: 1)Int pthread_setcancelstate(int state,int * oldstate); 这个函数用来设定本线程对cancel信号反应,state有两种值:PTHREAD_CANCEL_ENABLE。分别表示收到信... 阅读全文
posted @ 2015-12-13 21:24 DChipNau 阅读(216) 评论(0) 推荐(0)
摘要:申请内存的函数有哪些,以及其特点其实总结起来,申请内存的函数主要有kmalloc,vmalloc,__get_free_page,malloc函数族,alloca。下面分别介绍:1. vmalloc:内核态的内存申请函数,也是基于slab机制。申请的物理内存并不连续,速度相比于kmalloc要慢。用于申请大块内存。其分配的内存在内核空间中的动态映射区。Vmalloc能分配的内存较大,可以通过命令“... 阅读全文
posted @ 2015-12-13 21:16 DChipNau 阅读(2123) 评论(0) 推荐(0)
摘要:内核空间与用户空间的通信方式 下面总结了7种方式,主要对以前不是很熟悉的方式做了编程实现,以便加深印象。 1.使用API:这是最常使用的一种方式了A.get_user(x,ptr):在内核中被调用,获取用户空间指定地址的数值并保存到内核变量x中。B.put_user(x,ptr):在内核中被调用,将内核空间的变量x的数值保存到到用户空间指定地址处。C.Copy_from_user()/copy_... 阅读全文
posted @ 2015-12-13 21:15 DChipNau 阅读(18966) 评论(0) 推荐(5)
摘要:函数调用的细节实现这个问题当时感觉答得还可以,不过很多细节记不清晰了。所以下面反汇编一段小程序,进行分析,因为我比较熟悉的是arm汇编,所以我选择了一台安装了交叉工具链的ubuntu,而没有使用之前的centos。所以可能画风会有些不同。下图是我写了一个简单的程序和makefile。程序中是由main函数调用fun()函数。 编译程序,生成可执行文件,并对其进行反汇编,将反汇编之后的信息写入dum... 阅读全文
posted @ 2015-12-13 21:10 DChipNau 阅读(462) 评论(0) 推荐(0)
摘要:Kmalloc申请的最大内存 以前虽然读过源码,但是对于它的申请上限确实没注意过。下面分析下,下面是kmalloc的源码。 可以看出,如果想知道kmalloc能申请的范围,需要跳转到文件中观察。下图便是包含的文件 可以看出,kmalloc一般情况下的上限是128K,但是如果打开了KMALLOC_MAX_SIZE这个宏,可以申请的内存会更大,如果想要知道上限的话,需要知道KMALLOC_MAX_S... 阅读全文
posted @ 2015-12-13 21:08 DChipNau 阅读(6254) 评论(0) 推荐(0)
摘要:如何在不重新编译内核,不rmmod内核模块的情况下修改系统调用为了解决这个问题,最终实现了两种解决方式:1.Linux系统调用劫持2.Kprobes内核调试技术(并非真正的修改)下面分别说下:Linux系统调用劫持:其实就是修改内核符号表,来达到一个劫持的作用。因为系统调用实际上是触发了一个0x80... 阅读全文
posted @ 2015-12-13 21:07 DChipNau 阅读(2641) 评论(1) 推荐(2)
摘要:一直想自己做一个最小系统,这次终于把想法付诸实现。 原理图如下: PCB图如下: 过了多日,板子终于邮到了,就是下面这个熊样。 焊接了稳压电路,发现稳压电路原理图部分画错,没有接地,然后飞了根线,稳压电路才稳稳的好用。 焊接stm32芯片的时候,其中VCC和GND引脚挂了锡,结果烧了一块稳压芯片,最 阅读全文
posted @ 2015-12-13 20:52 DChipNau 阅读(25760) 评论(1) 推荐(0)
摘要:使用下面这个命令取消回显stty -echo使用下面这个命令打开回显stty echo 阅读全文
posted @ 2015-12-07 19:40 DChipNau 阅读(658) 评论(0) 推荐(0)
摘要:格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m"例如:echo -e "\033[41;36m something here \033[0m"其中41的位置代表底色, 36的位置是代表字的颜色那些ascii code 是对颜色调用的始末.\033[ ; m …… \... 阅读全文
posted @ 2015-12-06 13:35 DChipNau 阅读(502) 评论(0) 推荐(0)
摘要:被朋友圈中的atom的activate-power-mode 震撼到了,于是想试试。步骤如下首先安装atom:sudo add-apt-repository ppa:webupd8team/atomsudo apt-get updatesudo apt-get install atom然后安装act... 阅读全文
posted @ 2015-12-02 22:45 DChipNau 阅读(466) 评论(0) 推荐(0)
摘要:Input system (输入子系统) 以前写一些输入设备(键盘,鼠标等)的驱动都是字符设备,混杂设备处理的,linux开源社区的大神门看到了这大量的输入设备如此分散不堪,就想有木有一种机制,可以对分散的,不同类别的输入设备进行统一的驱动,所以才出现了输入子系统。 输入子系统引入的好处:1) 统一了物理形态各异的相似输入设备的处理功能。例如:各种鼠标,不论PS/2,usb,还是蓝牙,都被同样... 阅读全文
posted @ 2015-12-01 14:56 DChipNau 阅读(668) 评论(0) 推荐(0)
摘要:总线设备驱动模型一个总线设备驱动包含三个元素:总线,驱动,设备。总线是处理器和设备之间的同道,在设备模型中,所有的设备都通过总线相连,甚至是内部的虚拟“platform”总线。 总线:描述总线的数据结构如下: 总线注册和删除使用: 下面介绍几个比较重要的总线方法: 。总线属性Buf_attribute的结构定义如下: 而总线设备和总线属性的结合和解除如下: 设备:Linux系统中的每一个总线... 阅读全文
posted @ 2015-12-01 14:51 DChipNau 阅读(456) 评论(0) 推荐(0)
摘要:Mmap系统调用: Mmap函数是内存映射函数,负责把文件内容映射到进程的虚拟内存空间,通过对这段内存的读取和修改,来实现堆文件的读取和修改,而不需要再调用read,write等操作。 原型如下: 其参数含义如下: 有映射函数就有解除映射函数,munmap就是解除映射的函数: 注意:直接映射过来的区间虽然用字符型形式表示,但是不一定包含‘\0’,所以使用字符型拷贝函数的时候要慎重。最好用内存拷贝... 阅读全文
posted @ 2015-12-01 14:50 DChipNau 阅读(520) 评论(0) 推荐(0)
摘要:等待队列:在linux驱动程序设计中,可以实现等待队列来实现进程的阻塞。等待队列可以看做保存进程的容器,在阻塞进程时,将进程放入等待队列,当唤醒进程时,从等待队列中取出进程。 主要方法如下: 但是我写的等待队列阻塞程序总有一些问题,就是不能成功唤醒等待程序,如下:正确版本: 错误版本: 查看了内核源码,原来是这样,如果传进去一个常数0,wait_event就永远都不会跳出去了。 Selec... 阅读全文
posted @ 2015-12-01 14:45 DChipNau 阅读(176) 评论(0) 推荐(0)