自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(40)
  • 收藏
  • 关注

原创 浅谈linux启动的那些事(initrd.img)

本文记录下linux系统的启动过程,分析下每一步都做了什么。一、linux系统的启动过程  1.加载BIOS,上电自检。因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性     等。通过BIOS的设置,计算机就知道去读取哪个硬件设备了。  2.读取MBR,即主引导记录。(这里有几个MBR中概念:DPT:分区表,通俗说就是硬盘上

2016-11-16 10:48:27 23152 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 10505

原创 基于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 1854

原创 GPT分区表详解

4.相关资料4.1.LBA:LBA中文名称:逻辑区块地址。是描述电脑存储设备上数据所在区块的通用机制,一般用在像硬盘这样的辅助记忆设备。我们俗称扇区。4.2.关于GUID及GPT分区表GUID:MBR分区方案:传统的分区方案,是将分区信息保存到磁盘的第一个扇区(MBR扇区)中的64个字节中,每个分区项占用16个字节,这16个字节中存有活动状态标志、文件系统标识、起止柱面号、磁头

2016-01-22 15:56:17 46850 2

原创 Linux内核之/proc节点

1.arm-linux-nm:将可执行程序生成对应的符号表,   arm-linux-as: 2.使用/proc 3.看门狗(wdt)定时器驱动*********************************************************************************** 在linux系统中,/proc文件系统它被用于内核向用户导出信息。/

2016-01-22 15:52:18 1683

原创 Linux内核之platform平台总线

基于platform 总线的设备驱动编写模式:    platform总线是内核注册好的用于管理设备及驱动的一种模式。其总线对应的类型为:struct bus_type.总线实现好了匹配规则,内核对于往platform总线上注册的设备及驱动对应的类型做了抽象。platform总线上要注册的设备类: struct platform_device {  const char *na

2016-01-22 15:50:48 487

原创 Linux内核之设备驱动模型

学习内容:总线、设备、驱动驱动模型:为了方便维护设备和驱动,内核抽象出三个类:总线 struct bus_type;设备 struct device;驱动 struct device_driver;这里的总线是抽象的该念总线,逻辑层面的,只是为了管理匹配向内核注册并和总线关联的设备和驱动的,匹配规则决定于总线。----------------------------

2016-01-22 15:49:21 419

原创 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 291

原创 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 429

原创 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 241

原创 Linux内核之ioctl

学习计划: 1.学习高级I/O 2.进程间的阻塞内容: 1.驱动集中实现ioctl读者只要把write换成ioctl,就知道用户程式的ioctl是怎么和驱动程式中的ioctl实现联系在一起的了。我这里说一个大概思路,因为我觉得《Linux设备驱动程序》这本书已说的非常清晰了,不过得花一些时间来看。在驱动程式中实现的ioctl函数体内,实际上是有一个switch{case

2016-01-22 15:42:17 1277

原创 Linux内核之字符设备驱动

学习计划: 1.vfs:虚拟文件系统   VFS的作用就是采用标准的Unix系统调用读写位于不同物理介质上的不同文件系统。VFS是一个可   以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的   粘合层。在古老的DOS操作系统中,要访问本地文件系统之外的文件系统需要使用特殊的工具才能   进行。而在Linux下,通过VFS

2016-01-22 15:40:03 455

原创 Linux内核之环境搭建(二)

学习计划: 1.将bootloader,我们编译的内核,文件烧写到emmc; 2.制作根文件系统; 3.学习内核的Makefile和Kconfig对内核的作用。  1).Makefile   管理如何编译整个工程的文件.面对树状结构的内核源码目录,内核编译采  用了各个子目录拥有自己目录相关的Makefile,内核编译依赖于各个子目录  下的子文件,这些Makefile

2016-01-22 15:38:11 316

原创 Linux内核之环境搭建

本人学习使用Red Hat操作系统,开发板使用exynos4412 coltex A9开发板 内容: 1.Linux内核版本号分为三部份:主板本号,次版本号,修正版本号; 2.make menuconfig 生成图形化界面选择驱动加载程序; 3.为PC机安装最新内核:   查看CPU核数命令:cat /proc/cpuinfo   将内核文件编译成可执行程序:make

2016-01-22 15:34:38 450

原创 高级编程之数据结构

数 据 库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 259

原创 高级编程之网络编程(四)

广播 组播广播 ===》只能用UDP协议形式发送数据 ===》不要求客户端一定在线。特点: 必须要发送的广播地址 ===》局域网中的最大地址。    必须要设置广播端程序的套接字属性允许发送广播。流程:发送端: sokcet()===>setsockopt() ===>sendto() ===>close()   1、setsockopt() ====>允许发送广播

2016-01-22 15:24:09 290

原创 高级编程之网络编程(三)

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 253

原创 高级编程之网络编程(二)

常用网络测试工具:1、telnet 默认的redhat 企业版本 和 win 8 以上系统不再支持该程序。 早期用于远程管理网络设备的系统命令。 格式: telnet  ip地址  端口 eg:    telnet 192.168.0.1  8888 注意:断开可以不写,默认链接的是23 号端口。2、netstat   测试网路端口的使用情况。 netstat

2016-01-22 15:21:00 236

原创 高级编程之网络编程(一)

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 285

原创 高级编程之进程间通信(三)

进程间通信(三) IPC 通信之 ==》信号量集===》信号灯 线程中用的是  posix无名信号量 进程中用的是  system V 的信号灯框架: key ==》申请信号量 ==》PV操作  ===>关闭信号量       semget        semop         semctl#include 原型:int semget(key_t key,

2016-01-22 15:12:47 244

原创 高级编程之进程间通信(二)

进 程 间 通 信 2: system V 的IPC通信: IPC 对象  ===》进程间通信 ===》IPC对象: 消息队列  共享内存 信号量集基本通信框架: key  ==>IPC对象 ===》读写  ===》关闭 ===》卸载key值的获取:1、通过ftok函数获取2、使用IPC_PRIVATE私有键值3、使用自定义的键值头文件: sys

2016-01-22 15:11:09 292

原创 高级编程之进程间通信(一)

进程间通信:三大类1、古老的通信方式  无名管道  有名管道  信号  ====》唯一的异步通信方式2、systemV  IPC 对象  消息队列  共享内存  ===》效率最高的通信方式  信号量集 3、BSD socket 套接字  域内套接字  ==》单机进程间通信  网络套接字  ==》不同主机上的进程间通信古老的通信方式:1、管道

2016-01-22 15:08:57 333

原创 高级编程之线程(二)

线 程 的 传 参 1、pthread_create(tid,NULL,fun,arg);  ===>arg 回调函数参数1.1  向子线程中传入数字 1.2  向子线程中传入字符串1.3  向子线程中传入结构体练习:设计一个多线程函数,并向其中送入一个结构体变量   在线程中打印输出结构体变量的所有成员变量值。2 、多线程的互斥 ===》互

2016-01-22 14:12:57 267

原创 高级编程之线程(一)

线  程 线程 ===》linux 线程 ===》posix线程 ===》pthread库1、线程的概念   线程是一个轻量级的进程   是一个进程中的多个任务   它是CPU调度的最小单位2、线程的特点: 1、是第三方开发的库 ==》pthread库    编写时候要包含: pthread.h    编译的时候要加: -lpthread 2、资源共

2016-01-22 14:10:43 239

原创 高级编程之进程(三)

进 程 的 使 用 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 200

原创 高级编程之进程(二)

进  程 1、进程的退出 return   ===>只有在main函数中执行才能将进程退出。   exit()   ===》进程退出函数,会自动刷新缓存区。 _exit(); ===》强制退出进程,不会刷新缓存区。2、特殊进程 2.1  孤儿进程  ===》父进程退出,而子进程单独存在。      子进程变成孤儿进程。 2.2  僵尸进程  ===》父进程存在,

2016-01-22 14:05:06 199

原创 高级编程之进程(一)

进 程 1、进程的概念 1、进程是一个程序的一次执行过程。 2、进程是一个可独立调度的任务,是操作系统的最小调度单位。2、进程和程序的区别 2.1  程序:静态 是一种资源文件 没有执行过程 2.2  进程:动态 有生命周期的 执行过程。3、进程的特点和分类 3.1 特点:  PID: ===》进程标识符 ===》进程在操作系统中的合法唯一标识。  PP

2016-01-22 14:02:28 207

原创 高级编程之目录(二)

目 录 操 作    打开目录 ===》遍历目录 ===》切换目录 ===》关闭目录   opendir() ===>readdir()/chdir() ====>closedir()头文件:#include #include #include 原型:DIR *opendir(const char *name);功能: 从指定的name路径+目录名下打开该目

2016-01-22 14:00:35 230

原创 高级编程之目录(一)

目 录 流 1.DIR *opendir(const char *name); 功能:  打开一个目录获得一个目录流指针 参数:  name:文件名 返回值:  成功目录流指针  失败返回NULL  2.struct dirent *readdir(DIR *dirp); 功能:  从目录流中读到一个文件的信息 参数:  dirp:目

2016-01-22 13:58:08 343

原创 高级编程之文件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 196

原创 高级编程之文件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 265

原创 数据结构学习之栈、队列等

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 360

原创 数据结构学习之链表

链  表 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 290

原创 数据结构学习之顺序表(二)

顺 序 表 1.判断顺序表是否为空 int IsEmptySeqList(SeqList *list); 功能:  判断顺序表是否为空 参数:  list:顺序表的地址 返回值:  如果为空返回1  不为空返回0 int IsEmptySeqList(SeqList *list) {  1.判断顺序表元素是否为空  2.为空返回1  

2016-01-22 13:44:55 970

原创 数据结构学习之顺序表(一)

数 据 结 构 数据元素和数据元素之间的关系  逻辑结构:  线性结构 表  树形结构 树  网状结构 图  存储结构:  顺序存储 顺序表 顺序栈 顺序队列  链式存储 链表   链式栈 链式队列  索引存储  散列存储    查找和排序 内存泄漏检测工具  valgrind valgrind --tool=memcheck --l

2016-01-22 13:40:20 368

原创 C语言学习之指针高级

函  数 (一) 参数:当函数想使用主函数中的变量时,则      将主函数中的变量作为参数传递给函   数内部 返回值:当主函数想使用函数中的变量或者   数据时,则将函数内部的数据或变量   作为返回值返回给主函数使用 1.函数的传参  1.复制传递   实参将值复制一份并给相应的形参   对形参的操作和实参没有任何关系  2.地址传递 

2016-01-22 13:37:05 274

原创 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 330

原创 C语言学习之数组及指针

数  组 数组的分类      1.一维数组   1.整型数组   2.字符型数组  2.二位数组  3.多维数组  1.一维数组  1.数组的定义方式   存储类型 数据类型 数组名[元素个数]  2.数组的存储方式   数组在内存地址中连续存放  3.数组的初始化   1.局部初始化    int a[5] = {0,1,2};

2016-01-22 13:27:47 298

原创 C语言学习之函数

函数 1.函数的作用  1.可以避免重复性代码  2.可以将程序模块化 2.函数的定义和函数的调用  1.存储类型 返回值类型 函数名(参数1,参数2,...)   1.存储类型    标识函数存放的位置    extern 函数原型存放在另一个文件中    static 函数原型存放在当前文件中,并且           限定函数的作用域在当前文件中

2016-01-22 13:26:02 210

原创 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 712

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除