- 博客(78)
- 收藏
- 关注
原创 高通启动源码分析
little kernel:http://zk306516.blog.163.com/blog/static/9888660020161024103144280/sbl1:http://zk306516.blog.163.com/blog/static/988866002016102410361681/http://zk306516.blog.163.com/blog/stat
2017-08-18 09:35:16
672
转载 物理地址与虚拟地址
虚拟地址和物理地址的概念 CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit,内存管理单元),或者有MMU但没有启用,CPU核在取指令或访问内存时发出的地址将直接传到CPU芯片的外部地址引脚上,直接被内存芯片(以下称为物理内存,以便与虚拟内存区分)接收,这称为物理地址(Physical Address,以下
2017-06-06 10:16:42
1381
转载 fork()函数两次返回
为什么fork会返回两次?由于在复制时复制了父进程的堆栈段,所以两个进程都停留在fork函数中,等待返回。因此fork函数会返回两次,一次是在父进程中返回,另一次是在子进程中返回,这两次的返回值是不一样的。过程如下图。fork调用的一个奇妙之处就是它仅仅被调用一次,却能够返回两次,它可能有三种不同的返回值:在父进程中,fork返回新创建子进程的进程ID;
2017-03-26 14:02:22
1114
转载 android架构
Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。(1)应用程序Android会同一系列核心应用程序包一起发布,该应用程序包包括客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA语言编写的。(2)应用程序框架开
2017-03-26 13:21:16
450
转载 作为一个新人,怎样学习嵌入式Linux?(韦东山)
被问过太多次,特写这篇文章来回答一下。 在学习嵌入式Linux之前,肯定要有C语言基础。汇编基础有没有无所谓(就那么几条汇编指令,用到了一看就会)。C语言要学到什么程度呢?越熟当然越好,不熟的话也要具备基本技能。比如写一个数组排序、输入数字求和什么的。学C语言唯一的方法是多写程序多练习,编译出错没关系,自己去解决;执行出错没关系,自己去分析。以前我是用VC来练习C语言的,经常去
2017-03-16 16:07:20
711
转载 disable_irq和disable_irq_nosync
//////使用disable_irq条件是确保不在指定线上传递新的中断,同时还要确保所有已经开始执行的处理函数已全部退出所以如果在n号中断的顶半部调用disable_irq(n),会一起系统的死锁。因为正如下面分析,一旦调用它,最终CPU会在其循环while中持续检测,但又由于disable_irq(n)在其自身的顶半部中,所以顶半部始终无法完成,继而while(status)中退出条件
2017-03-11 17:47:46
1181
原创 第一章 linux简介 第二章 从内核出发
直概括我觉得比较有价值的知识点:第一章 linux简介(1)用户空间与内核空间区别 P4 P5(2)应用程序与内核的交互关系 P4(3)与所有进程无关的,专门的中断上下文(4)内核版本命名规则 P7第二章 从内核出发(1)获取内核源码途径 P10(2)内核源码树 P11(3)减少编译的垃圾信息,黑洞(4)
2017-03-10 23:11:53
267
原创 Linux设备驱动开发详解——读书笔记
建议:如果时间允许,先读Robert Love的《Linux内核设计与实现》,即LDD。而读LDD前最好先读《计算机操作系统》和《》数据结构与算法》相关书籍。慢慢添加
2017-03-09 16:23:45
524
转载 makefile编写规则
http://blog.csdn.net/ruglcc/article/details/7814546/转自:http://blog.csdn.net/haoel/article/details/2886
2017-03-08 15:39:20
272
原创 提示符显示完整的路径导致命令行太长
Ubuntu 默认的终端下面,进入很多层的目录后,前面那个提示符会显示完整的路径,这样命令行太长,让人觉得不舒服,现在教大家一个方法修改一下使命令行只显示当前目录的最后一级目录名,这样看起来也好,用pwd可以看到完整的路径名。附注:~代表主目录假设你登陆的用户明为user~ 就表示 /home/user工具/原料
2017-03-08 14:14:43
1333
转载 Linux C中数组,结构体的指定初始化(乱序初始化)
在阅读GNU/Linux内核代码时,我们会遇到一种特殊的结构初始化方式。该方式是某些C教材(如谭二版、K&R二版)中没有介绍过的。这种方式称为指定初始化(designated initializer)。下面我们看一个例子,Linux-2.6.x/drivers/usb/storage/usb.c中有这样一个结构体初始化项目: static struct usb_driver usb_sto
2017-03-05 10:04:30
1921
1
转载 计算结构体成员偏移量
转自:http://blog.csdn.net/encourage2011/article/details/52463857问题写一个宏计算出结构体成员的偏移量。 假设有如下一个结构体,要计算成员c的在结构体中的偏移量。typedef struct Type_t{ char a; // 0 int b; // 4~7 double c; //
2017-02-28 23:20:53
472
转载 github学习
1:http://blog.csdn.net/googdev/article/details/52787516?locationNum=1&fps=1
2017-02-26 17:08:21
269
转载 上下文
在软件工程中,上下文是一种属性的有序序列,它们为驻留在环境内的对象定义环境。在对象的激活过程中创建上下文,对象被配置为要求某些自动服务,如同步、事务、实时激活、安全性等等。又比如计算机技术中,相对于进程而言,上下文就是进程执行时的环境。具体来说就是各个变量和数据,包括所有的寄存器变量、进程打开的文件、内存信息等。
2017-02-26 10:57:54
868
转载 进程,线程的地址空间问题
1转载自:http://www.cnblogs.com/tracylee/archive/2012/10/29/2744228.html同一进程的线程共享的资源和独有的资源线程共享的环境包括:进程代码段、进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进
2017-02-26 10:44:01
8475
2
原创 linux内核设计与实现(lkd)学习——如何理解中断处理程序可以使用自旋锁
如何理解中断处理程序可以使用自旋锁:我的理解其实是指:中断处理程序可以与当前处理器正进行的进程共享某个资源,而对该共享资源的保护机制是自旋锁。而这个会被中断处理程序使用到的共享资源采用自旋锁进行保护时,附加了条件就是先禁止中断。这也就是说处理器处理当前进程时一旦调用该与中断共享的数据时,必先有禁止中断的动作再获得其锁使用权,即此时该进程就不存在会被中断打断的情况(中断已禁止),也就不会产生死锁
2017-02-22 17:04:33
1804
转载 linux调度策略
Linux进程调度原理(一)linux内核的三种主要调度策略:1,SCHED_OTHER 分时调度策略, 2,SCHED_FIFO实时调度策略,先到先服务 3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值。分时进程则通过nice和counter值决定权值,nice越小,co
2016-12-08 19:44:31
1429
原创 获取当前进程的task_struct指针------current宏
转载自:http://blog.sina.com.cn/s/blog_6b610d1401012hcf.htmlLinux内核怎样获取进程任务结构 今天Linux是一个一体化内核(monolithic kernel)系统。设备驱动程序可以完全访问硬件。Linux内的设备驱动程序可以方便地以模块化(modularize)的形式设置,并在系统运行期间可直接装载或卸载。我
2016-12-04 14:38:25
2892
原创 附加
[如果函数的参数是一个指针,不要指望用该指针去申请动态内存] 原来问题出在C编译器原理上:编译器总是要为函数的每个参数制作临时副本,指针参数tree的副本是 _tree,编译器使 _tree = tree。如果函数体内的程序修改了_tree的内容,就导致参数tree的内容作相应的修改。这就是指针可以用作输出参数的原因。即上面的函数代码经过编译后成为: createNode
2016-10-23 05:21:10
255
原创 C语言中自增符号
自增自减运算符:http://baike.baidu.com/link?url=lvWpE-kIzYhqu2nxrHCQ0bQxREmqVDyt22Q4WeNskSorlz-xT-nP60ucg5MfZdJmYmvkqrJsgNKqM3TCaHEB0DLAZ1zdVWTVoiDTo40bP7BjALJQHiBtldpwD2bY9eex3d3NuXPkAXRQuSvSGOY2EK1.自增运算符
2016-10-23 03:39:00
2379
原创 C考题
1.统计一个数的二进制数中1的个数。利用x=x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1会将该位变为0. int Count(int x){ int sum=0; while(x) { sum++; x=x&(x-1); } return sum;}或者:int Countone(int i)
2016-10-23 03:18:39
393
转载 内存,外存
存储器的种类很多,按其用途可分为主存储器和辅助存储器,主存储器又称内存储器(简称内存),辅助存储器又称外存储器(简称外存)。外存通常是磁性介质或光盘,像硬盘,软盘,磁带,CD等,能长期保存信息,并且不依赖于电来保存信息,但是由机械部件带动,速度与CPU相比就显得慢的多。内存指的就是主板上的存储部件,是CPU直接与之沟通,并用其存储数据的部件,存放当前正在使用的(即执行中)的数据和程序,它的物理实质
2016-10-17 14:35:46
342
原创 从栈的分配例子来看malloc分配内存的问题
注意1与5点;1、Linux内核管理内存空间的分配,所有程序对内存空间的申请和其他操作,最终都会交给内核来管理。2、linux实现的是“虚拟内存系统”,对用户而言,所有内存都是虚拟的,也就是说程序并不是直接运行在物理内存上,而是运行在虚拟内存上,然后由虚拟内存转换到物理内存。3、linux将所有的内存都以页为单位进行划分,通常每一页是4KB;4、在对虚拟内存地址到物
2016-10-10 05:15:59
2548
转载 C语言的布尔类型bool
C语言的布尔类型 在C语言标准(C89)没有定义布尔类型,所以C语言判断真假时以0为假,非0为真。所以我们通常使用逻辑变量的做法://定义一个int类型变量,当变量值为0时表示false,值为1时表示trueint flag;flag = 0;//......flag = 1;if( flag ){//......} 但这种做法不直观,
2016-10-10 04:54:36
908
原创 C函数参数传递与返回值传递
(1)参数传递 __stdcall和__cdecl都是函数调用约定关键字,先给出这两者的区别,然后举实例分析: __stdcall:参数由右向左压入堆栈;堆栈由函数本身清理。 __cdecl:参数也是由右向左压入堆栈;但堆栈由调用者清理。 另外,这两者在同一名字修饰约定下,编译过后变量和函数的名字也不一样,具体见另一博文:名字修饰约
2016-09-25 17:54:10
3942
转载 内核态和用户态的区别
http://blog.csdn.net/fatsandwich/article/details/2131707#http://jakielong.iteye.com/blog/771663当一个任务(进程)执行系统调用而陷入内核代码中执行时,我们就称进程处于内核运行态(或简称为内核态)。此时处理器处于特权级最高的(0级)内核代码中执行。当进程处于内核态时,执行的内核代码会使用当前
2016-09-25 17:37:04
361
原创 嵌入式编程小知识点
(1)uint8_t,uint16_t,uint32_t数据类型_t的意思到底表示什么?具体的官方答案没有找到,不过我觉得有个答案比较接近。它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起的别名,新瓶
2016-09-25 16:12:35
300
转载 野指针
系统为存储指针变量本身分配内存和指针指向的内存是两个概念如:char *p ; 系统为指针变量分配内存,用于保存地址值,在32位机器中,为四字节;但由于未初始化,指针指向的目标内存是不确定的。 野指针指向一个已删除的对象或未申请访问受限内存区域的指针。与空指针不同,野指针无法通过简单地判断是否为 NULL避免,而只能通过养成良好的编程习惯来尽力减少。对野指针进行操作
2016-09-22 13:34:13
275
原创 字符串处理函数
C语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索几类。 使用这些函数可大大减轻编程的负担。用于输入输出的字符串函数,在使用前应包含头文件"stdio.h",使用其它字符串函数则应包含头文件"string.h"。下面介绍几个最常用的字符串函数。字符串输出函数 puts格式: puts(字符数组名)功能:把字符数组中的字符串输
2016-09-22 13:10:29
365
转载 转义字符
转义字符 编辑所有的ASCII码都可以用“\”加数字(一般是8进制数字)来表示。而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符,因为后面的字符,都不是它本来的ASCII字符意思了。字符表编辑所有的转义字符和所对应的意义:转义字符意义ASC
2016-09-22 12:33:27
743
转载 运算符优先级
C语言编辑优先级运算符名称或含义使用形式结合方向说明1后置++后置自增运算符变量名++左到右 后置--后置自减运算符变量名-- [ ]
2016-09-21 21:24:12
327
转载 嵌入式C语言经典试题
C语言测试是招聘嵌入式系统程序员过程中必须而且有效的方法。这些年,我既参加也组织了许多这种测试,在这过程中我意识到这些测试能为带面试者和被面试者提供许多有用信息,此外,撇开面试的压力不谈,这种测试也是相当有趣的。 从被面试者的角度来讲,你能了解许多关于出题者或监考者的情况。这个测试只是出题者为显示其对ANSI标准细节的知识而不是技术技巧而设计吗?这个愚蠢的问题吗?如要你答
2016-09-21 04:26:14
1676
1
转载 Interrupt Service Routines(中断服务程序):ISR
中断是嵌入式系统中重要组成部分,很多编译器开发商都让标准c支持中断,并引入关键字_interrupt.但是:1、ISR不能有返回值;2、ISR不能传递参数;3、ISR应该是短而高效的,在ISR中做浮点运算是不明智的;4、ISR中不应该有重入和性能上的问题,因此不应该使用pintf()函数。 转自CSDN 1.ISR 不能有返回值。为什么?
2016-09-21 03:29:40
1736
原创 求素数(筛法求素数)
一.要判断素数,那么就要知道什么是素数。素数就是只能除了1和它本身外,不能被任何整数整除的数。那么在c语言编程中我们只要确定一个整数不能被1到它本身之间的整数所整除,那么它就是素数。二.用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到“筛子”为空时结束。如有:
2016-09-18 21:33:26
612
转载 位操作
按位操作Title: 位操作基础篇之位操作全面总结Author: MoreWindowsE-mail: morewindows@126.comKeyWord: C/C++ 位操作 位操作技巧 判断奇偶 交换两数 变换符号 求绝对值 位操作压缩空间 筛素数 位操作趣味应用 位操作笔试面试位操作篇共分为基础篇和提高篇,基础篇主要对位操作进行
2016-09-18 19:06:35
610
原创 union
“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,以达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。(1)当一个共
2016-09-16 23:00:35
250
转载 switch
switch(表达式){ case 常量表达式1: 语句1; case 常量表达式2: 语句2; … case常量表达式n: 语句n; default: 语句n+1;}其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断,继续执行后
2016-09-16 22:05:18
382
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人