- 博客(37)
- 收藏
- 关注
原创 深入理解Linux内核笔记—第02章:内存寻址.md
2.1 内存地址80x86微处理器的三种不同地址: 逻辑地址:包含在机器语言指令中用来指定一个操作数或一条指令的地址 每一个逻辑地址都有一个段和偏移量组成,偏移量指明了段开始的地方到实际地址之间的距离线性地址:也成为虚拟地址,是一个32位无符号整数,可以用来表示高达4G的地址 线性地址通常用十六进制表示,值的范围为0x00000000到oxffffffff物理地址:用于内存芯片级内存单元
2016-10-23 00:02:59
2005
原创 《Linux命令行与shell脚本》笔记--第13章:处理用户输入
13.1 命令行参数命令行参数:允许在运行脚本时向命令行添加数据值$ ./addem 10 3013.1.1 读取参数bash shell会将一些称为位置参数的特殊变量分配给命令行输入的所有参数,者甚至包括shell执行的程序的名字 位置参数变量是标准的数字 $0:程序名$1:第一个参数2:第二个参数,以此类推,直到第9个参数2:第二个参数,以此类推,直到第9个参数9$cat tes
2016-06-06 23:08:02
906
原创 《Linux命令行与shell脚本》笔记--第12章:更多结构化命令
12.1 for命令for命令格式: - list参数:迭代中要用的一系列值 - 每个迭代中,变量var会包含列表中的当前值 - do和done语句之间输入的命令可以是一条或多条标准的bash shell命令for var in list do commandsdone12.1.1 读取列表中的值for命令最基本的用法就是遍历for命令自身中定义的一系列
2016-06-06 23:07:25
483
原创 《Linux命令行与shell脚本》笔记--第11章:使用结构化命令
11.1 使用if-then语句格式如下 if语句会执行if行定义的那个命令,如果该命令的退出状态码是0,则then部分的语句就会执行,其他值,则不会if commandthen commandsfi在要执行的命令结尾加个分号,就能在同一行使用then语句了,格式如下if command; then commandsfi11.2 if-then-else语句
2016-06-06 23:06:53
561
原创 《Linux命令行与shell脚本》笔记--第10章:构建基本脚本
10.1 使用多个命令如果两个命令一起使用,可在同一提示符行输入它们,用分号隔开10.2 创建shell脚本文件shell脚本第一行格式:#!/bin/bash通常shell脚本里,用#来注释行shell脚本的第一行是一个例外,#后!号告诉shell用哪个shell来运行脚本在指定了shell之后,可在文件的每行输入命令,后加一个回车如有需要,可用分号来在一行输入你要用的两个命令在shell
2016-06-06 23:06:09
612
原创 《Linux命令行与shell脚本》笔记--第9章:使用编辑器
9.1 Vim编辑器9.1.1 Vim基础vim编辑器在内存缓冲区中处理数据,其有两种模式普通模式插入模式vim中用来移动光标的命令h:左移一个字符j:下移一行k:上移一行l:右移一个字符PageDown(或Ctrl+F):下翻一屏PageUp(或Ctrl+B):上翻一屏数据G:移到缓冲区的最后一行num G:移动到缓冲区中的第num行gg:移到缓冲区的第一行命令行模式下将缓
2016-06-06 23:05:31
890
原创 《Linux命令行与shell脚本》笔记--第7章:管理文件系统.md
7.1 探索Linux的文件系统7.1.1 基本的Linux文件系统ext文件系统:扩展文件系统,Linux系统最早引入的系统。 使用虚拟目录来操作硬件设备,在物理设备上按定长的快来存储数据采用称作索引节点的系统来存储虚拟目录中所存储文件的信息 索引节点文件系统在每个物理设备中创建一个单独的表来存储这些文件的信息存储在虚拟目录中的每一个文件在索引节点表中都有一个条目,条目名称的扩展部分来自
2016-06-06 23:04:57
577
原创 《Linux命令行与shell脚本》笔记--第6章:理解Linux文件权限
6.1 Linux的安全性6.1.1 /etc/passwd文件/etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 登录用户名用户密码用户账户的UID用户账户的GID用户账户的文本描述用户HOME目录的位置rich:x:501:501:Rich Blum:/home/rich:/bin/bash默认情况下,bash
2016-05-25 17:30:13
610
原创 《Linux命令行与shell脚本》笔记--第5章:使用Linux环境变量
5.1 什么时环境变量 bash shell用一个成为环境变量的特性来存储有关的shell回话和工作环境的信息,这是它们成为环境变量的原因。它允许你在内存中存储数据,以便运行在账户、系统、shell的特性以及任何其他你需要存储的数据环境变量的分类 全局变量局部变量5.1.1 全局环境变量全局环境变量不仅对shell会话可见,而且对所有shell创建的子进程也可见,局部变量只是对创建的他们
2016-05-25 15:16:51
647
原创 《Linux命令行与shell脚本》笔记--第4章:更多的bash shell命令·
4.1 监测程序4.1.1 探查程序ps 命令 默认情况下,ps命令只会显示运行在当前控制台下的属于当前用户进程的进程 显示的当前进程的项目 进程号运行在哪个终端(tty)进程占用的CPU时间Linux系统支持的GNU ps命令支持3个不同的命令行参数 Unix风格的参数,前面加单破折线 常用的参数选项 -ef:查看系统上的所有运行的所有进程 -e:显示所有进程-f:显示完整
2016-05-21 23:58:21
546
原创 《Linux命令行与shell脚本》笔记--第3章:基本的bash shell命令
3.1 启动shell/etc/passwd:包含系统用户账户列表以及每个用户的基本配置信息 每个条目有七个字段,每个字段用冒号隔开 用户名用户密码用户的系统UID用户的系统GID用户的全名用户的默认主目录用户的默认shell程序rich:x:501:501:Rich Blum:/home/rich:/bin/bash默认情况下,bash shell启动时会自动处理用户主目录下
2016-05-21 15:19:58
553
原创 《Linux命令行与shell脚本》笔记--第2章:走进shell
因为图形化的操作界面,使得在系统上找到shell提示符都变得困难,本章将会涉及提供命令行环境需要什么,然后了解各种Linux发行版中碰到的终端模拟软件包2.1 终端模拟2.1.1 图形功能字符集 字符集是一组二进制命令,Linux可以将他们发给显示器来显示字符各种终端包支持以下几种字符集 ASCII:美国信息交换标准码ISO-8859-2/6/7/8:ISO字符集Unicode:ISO
2016-05-21 15:05:32
552
原创 《Linux命令行与shell脚本》笔记--第1章:初识linux shell
shell及脚本简介 GNU/Linux shell 是个交互工具,它为用户提供了启动程序、管理文件系统上的文件以及管理运行在Linux系统上的进程的途径 shell的核心是命令行提示符 它是shell的交互部分它允许你输入文本命令,之后将结束命令并将在内核中执行shell包含一组内置命令,可以用来完成一些操作,如复制文件、移动文件、重命名文件以及显示和终止系统上正在运行的程序脚本:将s
2016-05-21 13:43:17
622
原创 《Linux4.0设备驱动开发详解》笔记--第二十一章:Linux设备驱动的调试
21.1 GDB调式的方法GDB的四个功能:启动程序,可以按照工程师自定义的要求运行程序让被调使得程序可以在指定的地方停住,断点可以是条件表达式当程序停住时,可以检查此程序发生的事,并追踪上文动态的改变程序的执行环境调式内核和应用程序时调试的命令是相同的基本命令list命令(缩写l):列出代码 list ,显示程序第linenum行周围的源代码list ,显示函数名为function
2016-05-21 12:58:48
924
原创 《Linux4.0设备驱动开发详解》笔记--第十八章:ARM Linux设备树
18.1 ARM设备树简介设备舒适一种描述印鉴的数据结构,它起源于OpenFirmware(OF) 采用设备树前后对比: 采用设备树之前:ARM架构的板极硬件细节过多的被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx中采用设备树之后:许多硬件细节可以直接通过它传递给Linux,而不再需要在讷河中进行大量的冗余编码设备树的组成:由一系列被命名的节点(Node)
2016-05-21 12:52:36
3696
1
原创 《Linux4.0设备驱动开发详解》笔记--第十五章:Linux I2C核心、总线与设备驱动
Linux I2C体系结构15.1 I2C核心 I2C核心提供了I2C总线驱动和设备驱动的注册、注销的方法,I2C通信(Algorithm)方法上层的与具体适配器无关代码以及探测设备、检测设备地址的上层代码等I2C总线驱动 是对I2C体系结构中适配器端的实现,适配器可由CPU控制,甚至可以直接集成在CPU内部总线驱动包含I2C适配器数据结构i2c_adapter、I2C适配器的Algori
2016-05-20 13:49:38
5203
原创 《Linux4.0设备驱动开发详解》笔记--第十一章:内存与I/O访问
由于Linux系统提供了复杂的内存管理功能,所以内存的概念在Linux系统中的相对复杂,有常规的内存、高端的内存、虚拟地址、逻辑地址、总线地址、物理地址、I/O内存、设备内存、预留内存等概念11.1 CPU与内存、I/O11.1.1 内存空间与I/O空间I/O空间:在X86处理器中存在着I/O空间的概念,I/O空间是相对于内存空间而言的它通过特定的指令in、out来访问指令格式:IN 累加器
2016-05-20 13:45:10
2308
原创 《Linux4.0设备驱动开发详解》笔记--第十章:Linux设备驱动中的中断与时钟
10.1 中断与定时器分类 中断来源 内部中断 来源于CPU的内部(软件中断的指令、溢出、除法错误等)外部中断来源于外设请求是否可屏蔽 可屏蔽中断不可屏蔽中断中断的入口方式 向量中断 CPU给每个不同的中断分配不同的中断号,中断发生时会自动跳到该中断号对应的地址执行非向量中断 多个中断共享一个入口地址,进入该入口后通过软件判断中具体哪个中断ARM渡河处理器里最常用的中断
2016-05-20 13:44:09
5230
原创 Linux设备驱动中的异步通知与同步I/O
在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代。异步通知类似于硬件上的“中断”概念,比较准确的称谓是“信号驱动的异步I/O”。9.1 异步通知的概念和作用异步通知:一旦设备就绪,则主动通知应用程序,该应用程序无需查询设备状态几种通知方式比较: 阻塞I/
2016-05-20 13:42:34
5240
原创 《Linux4.0设备驱动开发详解》笔记--第八章:linux设备驱动的阻塞与非阻塞
8.1 阻塞与非阻塞I/O阻塞操作 : 是指在执行设备操作时,若不能获得资源,则挂起进程直到满足操作条件后再进行操作。被挂起的进程进入休眠, 被从调度器移走,直到条件满足。非阻塞操作:在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直到可以进行操作。非阻塞应用程序通常使用select系统调用查询是否可以对设备进行无阻塞的访问最终会引发设备驱动中poll函数执行。阻塞与非阻塞例程:
2016-05-19 16:53:47
641
原创 《Linux4.0设备驱动开发详解》笔记--第七章:Linux设备中的并发控制
7.1 并发与竞态并发是指多个执行单元同时、并发的被执行,而并发的执行单元对共享资源(硬件资源、软件上的的全局变量、静态变量等)的访问则很容易导致竟态竟态发生在以下几种情况 对称多处理器(SMP)的多个CPU单CPU内进程与抢占它的进程中断与进程解决方法是保证对共享资源的互斥访问 访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制保护 互斥途径:中断屏蔽、原子操作、信号量、自
2016-05-19 14:37:21
4228
原创 《Linux4.0设备驱动开发详解》笔记--第六章:Linux字符设备驱动
6.1 linux字符设备驱动结构6.1.1 cdev结构体cdev结构体描述一个字符设备struct cdev { struct kobject kobj; //内嵌的kobject对象 struct module *owner; //所属模块 const struct file_operations *ops;//文件操作
2016-05-19 10:23:06
1166
原创 《Linux4.0设备驱动开发详解》笔记--第五章:Linux文件系统与设备文件
5.1 Linux文件操作5.1.1 文件操作系统调用创建int create(const char *filename, mode_t mode); mode是存取权限,它同umask(在文件创建时需要去掉的一些权限)一起共同决定文件的最终权限 mode:O_…组合 - 打开int open(const char *pathname, int flags);int open(cons
2016-05-18 18:18:29
1036
原创 《Linux4.0设备驱动开发详解》笔记--第四章:Linux内核模块
4.1 内核模块程序结构加载:insmod,modprobe(同时加载模块的依赖模块)卸载:rmmod查看已加载的模块及模块间的依赖关系:lsmod,实际上是分析/proc/modules文件已加载的模块信息放在/sys/module目录下,没加载一个模块就会在该目录下生成一个以模块名命名的目录,“tree -a”可获取目录树模块许可声明:申明许可权限,否则将收到内核被污染警告,一般申明为
2016-05-18 11:03:37
1433
原创 《Linux4.0设备驱动开发详解》笔记--第三章:Linux下的C编程特点
3.1 Linux编码风格参考文章:Documentation/CodingStyle缩进用TAB{}使用: 对于结构体、if、for、while以及switch语句,“{”不另起一行如果if、for循环后只有1行,不要加“{”和“}”if和else混合用的时候,else语句不另起一行对于函数,“{”另起一行switch和case对齐3.2 GNU C与ANSI C零长度和变量长
2016-05-17 20:03:50
790
原创 《Linux4.0设备驱动开发详解》笔记--第二章:Linux内核及内核编程
2.1 Linux内核发展及演变1991年10月5日 Linus Torvalds创建五个支柱:Unix系统、Minix系统、GNU计划、POSIX标准和Internet每2-3个月更新一次大的版本号2.2 Linux2.6后的内核特点新的调度器:高负荷下的出色性能,更好的处理器扩展,采用CFS算法,新增调度类:SCHED_DEADLINE,它实现了EDF(最早截止期限优先)算法内核抢占
2016-05-17 15:08:19
2526
原创 《Linux4.0设备驱动开发详解》笔记--第一章:Linux设备驱动概念及基础
1.1. 设备驱动的分类字符驱动块驱动网络驱动1.2 硬件基础中央处理器结构的分类:冯诺依曼:指令和数据合并在一起,数据宽度相同(Intel和arm7)哈弗:指令和数据分开,可以有不同的数据宽度(arm9-cortex系列)通用处理器分类:为控制器(MCU),又称单片机微控制器(MPU)DSP分类:定点DSP和浮点DSP浮点用硬件来实现,处理速度高于定点定点DSP只能用定点运
2016-05-17 14:53:01
2037
原创 第2章:Android的编译环境--build系统
2.0 build简介Android的build系统基于GNU Make 和shell 构建的一套编译环境。这套系统定义了大量的变量和函数,无论编写一个产品的配置文件还是一个模块的Android.mk文件,都不用直接和GNU Make打交道,只需要理解Android提供的编译变量和函数,就能够方便的将我们开发的模块加入到Android的build体系中。Android系统build分类: 1、
2016-05-14 16:35:41
6985
1
原创 第一章:Android概论解析
1.1安装开发包Android系统的编译需要依赖一些第三方的开发包和工具,Oracle和Opend的JDK就是这个作用。1.2一些常用的工具说明Android SDK:包含系统开发所需要的许多工具:adb、ddms等Android Studio:谷歌开发的用来替代eclipse集成开发环境工具,是基于IntelliJ IDEA修改而来的。该工具只为书写java代码方便,编译的时候会有问题,解决方
2016-05-14 15:55:34
399
原创 欢迎使用CSDN-markdown编辑器
欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I 引用 Ctrl
2016-05-14 15:37:00
262
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人