- 博客(40)
- 收藏
- 关注
原创 浅谈linux启动的那些事(initrd.img)
本文记录下linux系统的启动过程,分析下每一步都做了什么。一、linux系统的启动过程 1.加载BIOS,上电自检。因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性 等。通过BIOS的设置,计算机就知道去读取哪个硬件设备了。 2.读取MBR,即主引导记录。(这里有几个MBR中概念:DPT:分区表,通俗说就是硬盘上
2016-11-16 10:48:27
24416
3
原创 基于ubuntu server 16.04环境安装kvm虚拟机并创建windows系统
由于项目需要,最近在研究kvm虚拟机,将这个过程中遇到的一些问题做一些记录。由于本人水平有限,其中不妥之处还请网友们不吝赐教!! 1.操作环境 ubuntu server 16.04 默认的安装后没有桌面环境,根据自己需要可以安装桌面环境,方法如下: 安装图形桌面。 sudo apt-get update sudo apt-get upgrade
2016-11-10 15:26:56
10622
原创 基于ubuntu16.04环境编译libvirt
1. 获取1.3.5的源代码wget http://libvirt.org/sources/libvirt-1.3.5.tar.gztar zxvf libvirt-1.3.5.tar.gzcd libvirt-1.3.5/ 2. 安装依赖包sudo apt-get install libyajl-dev libxml2-dev libdevmapper-dev
2016-11-10 14:18:27
1929
原创 GPT分区表详解
4.相关资料4.1.LBA:LBA中文名称:逻辑区块地址。是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。我们俗称扇区。4.2.关于GUID及GPT分区表GUID:MBR分区方案:传统的分区方案,是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头
2016-01-22 15:56:17
49247
2
原创 Linux内核之/proc节点
1.arm-linux-nm:将可执行程序生成对应的符号表, arm-linux-as: 2.使用/proc 3.看门狗(wdt)定时器驱动*********************************************************************************** 在linux系统中,/proc文件系统它被用于内核向用户导出信息。/
2016-01-22 15:52:18
1826
原创 Linux内核之platform平台总线
基于platform 总线的设备驱动编写模式: platform总线是内核注册好的用于管理设备及驱动的一种模式。其总线对应的类型为:struct bus_type.总线实现好了匹配规则,内核对于往platform总线上注册的设备及驱动对应的类型做了抽象。platform总线上要注册的设备类: struct platform_device { const char *na
2016-01-22 15:50:48
517
原创 Linux内核之设备驱动模型
学习内容:总线、设备、驱动驱动模型:为了方便维护设备和驱动,内核抽象出三个类:总线 struct bus_type;设备 struct device;驱动 struct device_driver;这里的总线是抽象的该念总线,逻辑层面的,只是为了管理匹配向内核注册并和总线关联的设备和驱动的,匹配规则决定于总线。----------------------------
2016-01-22 15:49:21
467
原创 Linux内核孩子Input子系统
0.在学习Linux驱动的过程中,遇到一个宏叫做container_of。 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: #define container_of(ptr, type, member) ({\ const typeof( ((type *)0)->member ) *__mptr = (ptr);\ /** * cont
2016-01-22 15:47:36
337
原创 Linux内核之内核锁
1.内核定时器: 未来的某个时间点执行提前设置的某个任务函数。 涉及到的核心头文件: #include 涉及到的结构体: struct timer_list { /* * All fields that change during normal runtime grouped to the * same cacheline */ struc
2016-01-22 15:44:56
492
原创 Linux内核之中断
1. 中断 涉及头文件: #include 中断的注册 int request_irq( unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev ); @irq: 中断号
2016-01-22 15:43:47
265
原创 Linux内核之ioctl
学习计划: 1.学习高级I/O 2.进程间的阻塞内容: 1.驱动集中实现ioctl读者只要把write换成ioctl,就知道用户程式的ioctl是怎么和驱动程式中的ioctl实现联系在一起的了。我这里说一个大概思路,因为我觉得《Linux设备驱动程序》这本书已说的非常清晰了,不过得花一些时间来看。在驱动程式中实现的ioctl函数体内,实际上是有一个switch{case
2016-01-22 15:42:17
1322
原创 Linux内核之字符设备驱动
学习计划: 1.vfs:虚拟文件系统 VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可 以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的 粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能 进行。而在Linux下,通过VFS
2016-01-22 15:40:03
497
原创 Linux内核之环境搭建(二)
学习计划: 1.将bootloader,我们编译的内核,文件烧写到emmc; 2.制作根文件系统; 3.学习内核的Makefile和Kconfig对内核的作用。 1).Makefile 管理如何编译整个工程的文件.面对树状结构的内核源码目录,内核编译采 用了各个子目录拥有自己目录相关的Makefile,内核编译依赖于各个子目录 下的子文件,这些Makefile
2016-01-22 15:38:11
374
原创 Linux内核之环境搭建
本人学习使用Red Hat操作系统,开发板使用exynos4412 coltex A9开发板 内容: 1.Linux内核版本号分为三部份:主板本号,次版本号,修正版本号; 2.make menuconfig 生成图形化界面选择驱动加载程序; 3.为PC机安装最新内核: 查看CPU核数命令:cat /proc/cpuinfo 将内核文件编译成可执行程序:make
2016-01-22 15:34:38
502
原创 高级编程之数据结构
数 据 库1、常用名词 DB 数据库 DBMS 数据库管理系统 MIS 管理信息系统 OA 办公自动化2、常用的数据库管理系统 2.1 大型 oracle 甲骨文 DB2 2.2 中型 mysql ms sql server 2.3 小型 sqlite3 access3、嵌入
2016-01-22 15:25:09
296
原创 高级编程之网络编程(四)
广播 组播广播 ===》只能用UDP协议形式发送数据 ===》不要求客户端一定在线。特点: 必须要发送的广播地址 ===》局域网中的最大地址。 必须要设置广播端程序的套接字属性允许发送广播。流程:发送端: sokcet()===>setsockopt() ===>sendto() ===>close() 1、setsockopt() ====>允许发送广播
2016-01-22 15:24:09
339
原创 高级编程之网络编程(三)
IO 模型1、阻塞模型 fifo pipe read fgetc fgets fread recv recvfrom 以上获取数据的函数默认都是阻塞方式接收数据。2、非阻塞模型 2.1 在开始阶段的open函数部分调整 。 open("./fifo",O_RDONLY|O_NONBLOCK); 函数 open read ....都不会阻塞。 2
2016-01-22 15:23:12
288
原创 高级编程之网络编程(二)
常用网络测试工具:1、telnet 默认的redhat 企业版本 和 win 8 以上系统不再支持该程序。 早期用于远程管理网络设备的系统命令。 格式: telnet ip地址 端口 eg: telnet 192.168.0.1 8888 注意:断开可以不写,默认链接的是23 号端口。2、netstat 测试网路端口的使用情况。 netstat
2016-01-22 15:21:00
270
原创 高级编程之网络编程(一)
TCP/IP 协议族:常用协议物理链路层: ARP RARP MTU网络层: IP ICMP RIP OSPF IGMP ?传输层: TCP UDP应用层: TFTP HTTP HTTPS SNMP SMTP DNS TCP 协议 ===》RFC 793 TCP 传输控制协议: 有链接 可靠 实时 UDP 协议 ===》RF
2016-01-22 15:19:53
326
原创 高级编程之进程间通信(三)
进程间通信(三) IPC 通信之 ==》信号量集===》信号灯 线程中用的是 posix无名信号量 进程中用的是 system V 的信号灯框架: key ==》申请信号量 ==》PV操作 ===>关闭信号量 semget semop semctl#include 原型:int semget(key_t key,
2016-01-22 15:12:47
279
原创 高级编程之进程间通信(二)
进 程 间 通 信 2: system V 的IPC通信: IPC 对象 ===》进程间通信 ===》IPC对象: 消息队列 共享内存 信号量集基本通信框架: key ==>IPC对象 ===》读写 ===》关闭 ===》卸载key值的获取:1、通过ftok函数获取2、使用IPC_PRIVATE私有键值3、使用自定义的键值头文件: sys
2016-01-22 15:11:09
322
原创 高级编程之进程间通信(一)
进程间通信:三大类1、古老的通信方式 无名管道 有名管道 信号 ====》唯一的异步通信方式2、systemV IPC 对象 消息队列 共享内存 ===》效率最高的通信方式 信号量集 3、BSD socket 套接字 域内套接字 ==》单机进程间通信 网络套接字 ==》不同主机上的进程间通信古老的通信方式:1、管道
2016-01-22 15:08:57
378
原创 高级编程之线程(二)
线 程 的 传 参 1、pthread_create(tid,NULL,fun,arg); ===>arg 回调函数参数1.1 向子线程中传入数字 1.2 向子线程中传入字符串1.3 向子线程中传入结构体练习:设计一个多线程函数,并向其中送入一个结构体变量 在线程中打印输出结构体变量的所有成员变量值。2 、多线程的互斥 ===》互
2016-01-22 14:12:57
300
原创 高级编程之线程(一)
线 程 线程 ===》linux 线程 ===》posix线程 ===》pthread库1、线程的概念 线程是一个轻量级的进程 是一个进程中的多个任务 它是CPU调度的最小单位2、线程的特点: 1、是第三方开发的库 ==》pthread库 编写时候要包含: pthread.h 编译的时候要加: -lpthread 2、资源共
2016-01-22 14:10:43
269
原创 高级编程之进程(三)
进 程 的 使 用 1、多进程逻辑处理2、exec函数族启动其他进程3、制作守护进程 exec函数族1、 l ==>列表 v ==》数组/容器 原型:int execl(const char *path, const char *arg, ...);功能:通过该函数可以将指定的path路径下程序名称为arg的 程序启动起来。参数: p
2016-01-22 14:06:19
229
原创 高级编程之进程(二)
进 程 1、进程的退出 return ===>只有在main函数中执行才能将进程退出。 exit() ===》进程退出函数,会自动刷新缓存区。 _exit(); ===》强制退出进程,不会刷新缓存区。2、特殊进程 2.1 孤儿进程 ===》父进程退出,而子进程单独存在。 子进程变成孤儿进程。 2.2 僵尸进程 ===》父进程存在,
2016-01-22 14:05:06
225
原创 高级编程之进程(一)
进 程 1、进程的概念 1、进程是一个程序的一次执行过程。 2、进程是一个可独立调度的任务,是操作系统的最小调度单位。2、进程和程序的区别 2.1 程序:静态 是一种资源文件 没有执行过程 2.2 进程:动态 有生命周期的 执行过程。3、进程的特点和分类 3.1 特点: PID: ===》进程标识符 ===》进程在操作系统中的合法唯一标识。 PP
2016-01-22 14:02:28
235
原创 高级编程之目录(二)
目 录 操 作 打开目录 ===》遍历目录 ===》切换目录 ===》关闭目录 opendir() ===>readdir()/chdir() ====>closedir()头文件:#include #include #include 原型:DIR *opendir(const char *name);功能: 从指定的name路径+目录名下打开该目
2016-01-22 14:00:35
256
原创 高级编程之目录(一)
目 录 流 1.DIR *opendir(const char *name); 功能: 打开一个目录获得一个目录流指针 参数: name:文件名 返回值: 成功目录流指针 失败返回NULL 2.struct dirent *readdir(DIR *dirp); 功能: 从目录流中读到一个文件的信息 参数: dirp:目
2016-01-22 13:58:08
370
原创 高级编程之文件I/O(二)
函 数 接 口 1.time time_t time(time_t *t); 功能: 获得1970年到现在所过的秒数 参数: t:要存放秒数空间的指针 返回值: 成功返回所过的秒数 失败返回(time_t *)(-1) 2.localtime struct tm *localtime(const time_t *tim
2016-01-22 13:55:47
227
原创 高级编程之文件I/O(一)
Linux操作系统当中IO都是对文件的操作 1.标准IO 一般都是对普通文件操作 是一种有缓存的IO 2.文件IO 一般都是对设备文件操作 是一种没有缓存的IO标准IO: stdio.h Dennis Ritchie printf scanf getchar putchar gets puts getc putc fgets fputs f
2016-01-22 13:54:12
294
原创 数据结构学习之栈、队列等
gdb调试段错误 1.ulimit -c unlimited 2.ulimit -c 1000 3.gcc 文件 -g 4.执行程序(./a.out)生成core文件 5.gdb a.out core 顺序栈 1.出栈 DATATYPE PopSeqStack(SeqStack *stack); 功能: 从顺序栈中出栈 参数: st
2016-01-22 13:48:14
383
原创 数据结构学习之链表
链 表 1.修改 int ReviseLinkList(LinkList *list, DATATYPE old, DATATYPE new); { 1.遍历链表查找old元素 2.修改old元素为new元素 3.成功返回0 } 2.尾插法 int LastInsertLinkList(Linklist *list, DATATYPE data)
2016-01-22 13:46:43
319
原创 数据结构学习之顺序表(二)
顺 序 表 1.判断顺序表是否为空 int IsEmptySeqList(SeqList *list); 功能: 判断顺序表是否为空 参数: list:顺序表的地址 返回值: 如果为空返回1 不为空返回0 int IsEmptySeqList(SeqList *list) { 1.判断顺序表元素是否为空 2.为空返回1
2016-01-22 13:44:55
1333
原创 数据结构学习之顺序表(一)
数 据 结 构 数据元素和数据元素之间的关系 逻辑结构: 线性结构 表 树形结构 树 网状结构 图 存储结构: 顺序存储 顺序表 顺序栈 顺序队列 链式存储 链表 链式栈 链式队列 索引存储 散列存储 查找和排序 内存泄漏检测工具 valgrind valgrind --tool=memcheck --l
2016-01-22 13:40:20
406
原创 C语言学习之指针高级
函 数 (一) 参数:当函数想使用主函数中的变量时,则 将主函数中的变量作为参数传递给函 数内部 返回值:当主函数想使用函数中的变量或者 数据时,则将函数内部的数据或变量 作为返回值返回给主函数使用 1.函数的传参 1.复制传递 实参将值复制一份并给相应的形参 对形参的操作和实参没有任何关系 2.地址传递
2016-01-22 13:37:05
328
原创 C语言学习之结构体等
结 构 体 1.结构体的定义 struct 结构体名 { 数据类型1 成员变量1; 数据类型2 成员变量2; 数据类型3 成员变量3; ... 数据类型n 成员变量n; }; 2.结构体的初始化 1.有名结构体初始化 1.全部初始化 struct student { char name[2
2016-01-22 13:32:28
358
原创 C语言学习之数组及指针
数 组 数组的分类 1.一维数组 1.整型数组 2.字符型数组 2.二位数组 3.多维数组 1.一维数组 1.数组的定义方式 存储类型 数据类型 数组名[元素个数] 2.数组的存储方式 数组在内存地址中连续存放 3.数组的初始化 1.局部初始化 int a[5] = {0,1,2};
2016-01-22 13:27:47
337
原创 C语言学习之函数
函数 1.函数的作用 1.可以避免重复性代码 2.可以将程序模块化 2.函数的定义和函数的调用 1.存储类型 返回值类型 函数名(参数1,参数2,...) 1.存储类型 标识函数存放的位置 extern 函数原型存放在另一个文件中 static 函数原型存放在当前文件中,并且 限定函数的作用域在当前文件中
2016-01-22 13:26:02
249
原创 C语言学习之switch语句
2.switch 1.单独使用switch switch (表达式) { case 常量1:语句1;break; case 常量2:语句2;break; case 常量3:语句3;break; ... default: 语句4; } * 表达式的值不允许是浮点数类型 case后面必须是常量,不允许接变量*** switch
2016-01-22 13:15:37
757
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人