知识积累
文章平均质量分 84
liusirboke
这个作者很懒,什么都没留下…
展开
-
Linux内核的配置与编译(x86平台)
一 内核的配置 1.装载所要参考的结果文件:执行命令make menuconfig ,选择装载那一项,退出然后选择yes保存。 (1)装载前的准备工作:首先将你要装载的参考的结果文件(.config)cp到含有make menuconfig(makefile)文件的目录下(即所下载Linux内核目录下)。 (2)注意事项:原创 2014-12-13 10:36:50 · 832 阅读 · 0 评论 -
linux进程间的通信-无名管道
1.linux进程间通讯(IPC)的主要方式:无名管道(pipe)有名管道(FIFO)信号(signal)消息队列共享内存信号量套接字(socket)注意:学习进程间的通信重点在每种通讯方式所适用的场景和其使用方法。2.管道通信一个进程在管道的尾部写入数据,另一个进程从管道的头部读出数据。管道包括无名管道和有名管道两种,前者只能用于父进程和子进程间的通讯,后者可用于运行于同一系统中的原创 2015-11-14 12:04:44 · 390 阅读 · 0 评论 -
linux进程相关函数
1.获取进程号获取当前进程号 函数名 :getpid 原型:pid_t getpid(void) 所属库文件:sys/types.h 、unistd.h 参数:无参数 功能:返回当前进程ID 返回值:成功返回当前ID,该函数always successful获取父进程号: 函数名 :getppid 原型:pid_t getppid(void) 所属库文件:sys/types.h原创 2015-11-13 13:43:24 · 612 阅读 · 0 评论 -
linux进程相关概念
1.基本概念进程定义:进程是一个具有独立功能的程序的一次运行活动。进程特点:动态型、并发性、独立性、异步性进程三态: 进程ID(PID):标识进程的唯一数字 父进程ID:PPID 启动进程的用户ID : UID进程互斥:当多个进程使用同一个资源,且该资源同一时刻只允许一个进程使用时,那么其他的进程必须等待到该资源释放后才能使用,这种情形叫做进程互斥。临界资源:某个时刻只允许一个进程访问原创 2015-11-13 12:03:02 · 683 阅读 · 0 评论 -
GDB使用方法
1.GDB的功能2.GDB的使用方法3.gdb常用命令使用方法原创 2015-11-12 18:36:35 · 592 阅读 · 0 评论 -
linux应用程序内存布局
1.linux应用程序内存布局从低地址到高地址分别为:代码段、数据段、BSS段、堆、栈对向高内存地址生长,栈想低内存地址生长linux中所有的应用程序都是这个布局,每个应用程序都是从0x80480000这个地址开始的,这样冲突吗?不冲突,因为这个地址是一个虚拟地址,linux中每个应用程序都有自己的虚拟地址空间。2.2.查看linux中应用程序内存布局方 法:通过查看应用程序进程中的进程地址原创 2015-11-10 18:15:44 · 3261 阅读 · 0 评论 -
linux中静态库的制作
1、linux中应用程序函数调用分为两种:库函数:运行于用户空间系统调用:运行与内核空间2.函数库分类静态链接库 在编译(即编译期链接)其将其打包到应用程序,如果多个程序调用同一个函数时,会造成内存资源的浪费,但是可移植性。动态链接库 在调用时(即调用是链接),将其拷贝到内存,多个应用程序(多进程)可以调用同一个库函数的拷贝;节约内存,但是不可移植。存放位置 linux中应用程序的原创 2015-11-10 18:05:13 · 630 阅读 · 0 评论 -
原子操作
1.原子变量:原子操作函数所使用的变量。 变量定义在内核源码:include/linux/Types.h中typedef struct { int counter;} atomic_t;2.原子操作: 原子操作从物理意义上来理解就是,操作的最小单位,不能在分割了。顾名思义,原子操作,就是对原子变量的操作,它将对一个数据的“读取→修改→回写”变成了一个不可打断的操作。它的执行是封闭的,不原创 2015-11-08 13:11:08 · 602 阅读 · 0 评论 -
进程上下文与中断上下文的理解
一.什么是内核态和用户态内核态:在内核空间执行,通常是驱动程序,中断相关程序,内核调度程序,内存管理及其操作程序。用户态:用户程序运行空间。二.什么是进程上下文与中断上下文1.进程上下文:(1)进程上文:其是指进程由用户态切换到内核态是需要保存用户态时cpu寄存器中的值,进程状态以及堆栈上的内容,即保存当前进程的进程上下文,以便再次执行该进程时,能够恢复切换时的状态,继续执行。(2)进程下文:其是指原创 2015-11-06 17:03:17 · 10155 阅读 · 6 评论 -
为什么linux内核函数出现错误,返回值是一个负数
该疑问出现与我看《linux内核设计与实现》这本书的12.3.2这节中下面一段代码:page = __get_free_pages(GFP_KERNEL,3);if (!page){ /*没有足够的内存:你必须处理这种错误!*/ return -ENOMEM; }1.如何理解函数返回指针内核中的函数通常以返回指针的形式来传递调用函数后执行的结果,返回值指针有原创 2015-10-31 17:52:13 · 2647 阅读 · 0 评论 -
Mini2440根文件系统的制作
1.制作根文件系统2.用busybox制作根文件系统3.制作ARM根文件系统3.使能NFS文件系统4.ARM嵌入式根文件系统的制作原创 2015-10-10 18:40:32 · 947 阅读 · 0 评论 -
ARM嵌入式linux系统学习之裸机(一)
1.裸机学习什么?裸机主要是学习对通过arm处理器的寄存器的操作来实现其内部资源和外部设备的控制及通信。学习裸机主要有两个目的,第一是熟悉其硬件的资源配置,学会编写bootloader;第二就是学习硬件驱动程序的工作原理,为内核驱动打下基础。2.裸机学习需要具备哪些基础?由于裸机程序主要是通过对核心处理器寄存器的操作来实现开发板外部设备、接口的功能,即主要和硬件打交道,因此首先你应该能看懂开发板的原原创 2015-07-29 16:13:46 · 2055 阅读 · 0 评论 -
开发板与主机ping不通的解决方案(mini2440)
组件一个由windows、linux和开发板组成的局域网 准备工作 1.虚拟机使用桥接方式 2.用根网线将开发板和主机直接连接起来(不经过交换机) 3.关闭linux的防火墙: 关闭selinux: 4.断掉外网(无线)ip设置 1.将linux的ip地址设置为静态ip:192.169.1.100 网关:192.169.1.1 设置子网掩原创 2015-07-15 11:24:34 · 12631 阅读 · 1 评论 -
关键字struct的用法
一 关键字struct1.struct简介:定义一个结构类型。2.用法: 形式一:struct book { char title[n]; char autho原创 2014-12-12 11:50:35 · 975 阅读 · 0 评论 -
Linux下格式化U盘及分区
前言:该问题是在hi3516下通过U盘实现自动升级时,遇到了不能挂载U盘的分区。打印log如下:U-Boot 2010.06-dirty (Jul 04 2016 - 14:39:59)Check spi flash controller v350... FoundSpi(cs1) ID: 0xC2 0x20 0x19 0xC2 0x20 0x19Spi(cs1): Block:64KB Ch原创 2016-07-15 18:17:11 · 6402 阅读 · 0 评论 -
LINUX分区
linux磁盘分区原创 2015-07-18 13:27:37 · 661 阅读 · 0 评论 -
ARM-LINUX开发环境的搭建(三)
NFS服务器的搭建:1.安装NFS服务器 在linux下安装光盘中Packages文件夹找到下面三个文件点击安装即可:2.配置NFS服务器 vim /etc/exports添加如下内容: /nfs 192.168.1.*(rw,sync,no_root_squash)注意:/nfs:共享目录192.168.1.*:允许访问共享目录的主机IP(rw,sync,no_root_squash)原创 2015-12-29 12:37:06 · 464 阅读 · 0 评论 -
uboot启动流程
u-boot支持许多CPU,以及一些常见的开发板。本文以u-boot-2011.06这个最新版本为例,简要介绍一下u-boot在smdk2410上的启动流程。首先系统是从arch/arm/cpu/arm920t目录下的start.s文件开始执行,并且实际开始执行的代码是从第117行开始:117:start_code:118: /*119: * set the cpu to SV转载 2016-03-25 13:30:06 · 1373 阅读 · 0 评论 -
linux进程通信-有名管道
1.核心理论:有名管道:有名管道又称FIFO文件,因此我们对有名管道的操作可以采用操作文件的方法,如使用open 、read 、write等函数。fifo文件与普通文件的对比 FIFO文件 普通文件 读取FIFO文件的进程只能以“RDONLY“方式打开fifo文件 任意方式 写FIFO 文件的进程只能以“WRONLY”方式打开fifo文件 任意方式 fifo文件读取后就消原创 2015-11-14 12:27:54 · 624 阅读 · 0 评论 -
linux进程间的通信机制--信号量互斥
1.核心理论进程互斥:多个并发的进程互相排斥的按照一定的先后顺序访问临街资源的过程叫做进程互斥。信号量的实质:数字信号量的操作:获取信号量(减法),释放信号量(加法)。信号量概念:信号量又名信号灯,与其他进程间的通信方式大不相同,主要用途是保护临界资源(进程互斥)。此外进程可以根据它判定是否能够访问某些共享资源。除了用于访问控制外,还用于进程同步。信号量分类:二值信号灯:信号灯的值只能取原创 2015-11-16 18:46:12 · 904 阅读 · 1 评论 -
Ubuntu密码输入正确,桌面登陆不了
1.遇到的这种情况的两种情形:Ubuntu系统更新过之后登陆不了界面。安装NVIDIA显卡相关驱动后,登陆不了。2.问题描述:系统启动进入登陆桌面后,输入的用户名和密码均正常,点击登陆,屏幕闪动几下后再次回来登陆桌面3.问题原因:因为你的主机显卡不是NVIDIA的显卡,很多都是intel的集成显卡。4.解决方案:卸载NVIDIA相关驱动。 使用:`原创 2017-03-03 12:29:17 · 1028 阅读 · 0 评论 -
uboot基本命令详解
1.help:在线帮助命令,即打印出uboot的所有命令。2.环境变量类的命令:printenv:查看环境变量(缩写:print)。print+环境变量名:答应某一个环境变量。setenv name value … :添加或者修改环境变量。setenv name:删除环境变量。saveenv :保存环境变量,即将当前定义的所有环境变量及其值存入flash中。3.文件下载tftp通过网络下原创 2016-03-07 10:41:25 · 1549 阅读 · 0 评论 -
C语言中的一些容易出现错误的知识点
1. 如何引用一个已经定义过的全局变量?如果定义的全局变量在同一文件中,则可以直接引用。如过引用的文件在其他文件中,则有两种方式来引用,一个是通过*.h文件,另一个是通过关键字extern来声明。注意:定义和声明的区别? 定义一个变量是是在内存中分配一定的空间;声明一个变量是告诉编译器有这个变量的存在。2. 全局变量可不可以定义在可被多个.c文件中包含的头文件中?为什么?不可以,全局变量作原创 2016-02-28 20:01:39 · 727 阅读 · 0 评论 -
制作Mini2440内核
1.配置:将对应的cpu的config-file文件改为“.config”复制到对应linux内核代码中。执行: make menuconfig ARCH=arm(若无该参数则默认为x86体系)进行配置,配置时看对应的system type项是否是所对应的开发板型号注意: - config-file文件就是配置开发板的文件,下载地址: - 进入该页面时候要选中nfs (使用nfs文件系统)和原创 2016-01-02 22:10:08 · 384 阅读 · 0 评论 -
ARM-LINUX开发环境搭建(二)
arm-linux交叉开发工具链的配置1.通过smb将arm-linux交叉开发工具链复制到/home目录下,linux下进入/home目录 cd /home2.解压ARM-TOOLS交叉开发工具包 tar -xvzf ARM-Tools.tar.gz3.将arm-linux-gcc-4.3.2.tgz解压到根目录 tar -xvzf arm-linux-gcc-4.3.2.tgz -C /4原创 2015-12-29 12:21:29 · 549 阅读 · 0 评论 -
ARM-LINUX开发环境的搭建(一)
一. 挂载安装光盘mount /dev/cdrom1 /mnt二. 配置网络文件1.选择NAT模式2.将网络配置文件备份3.更改网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-eth04.网络配置文件生效: source ifcfg-eth05.重新启动网卡: /etc/init.d/network restart具体的配置参见:ht原创 2015-12-27 14:06:22 · 580 阅读 · 0 评论 -
linux在线升级yum命令的使用
1.软件包仓库源在使用yum之前,我们需要首先将仓库的地址等信息存放在一个xxx.repo的文件中,并把该文件放到特定的目录/etc/yum.repod.d/下。在该目录下,可以存放多个后缀名为.repo的文件,表示有多少个仓库可以使用。使用yum的命令前提是你的linux必须可以上网。1.安装软件仓库(最好使用免费的软件仓库,redhat本身的软件库是收费的)在http://pkgs.re原创 2015-12-26 12:44:58 · 1490 阅读 · 0 评论 -
字符设备驱动程序设计
1.设备描述结构cdev在任何一种驱动模型中,设备都会用内核中的一种结构来描述。我们的字符设备在内核中使用struct cdev来描述。struct cdev{ struct kobject kobj; struct module *owner; const struct file_operations *ops;//设备操作集 struct list_hea原创 2015-12-16 18:35:59 · 671 阅读 · 0 评论 -
linux硬件访问技术
1.硬件访问实质驱动控制设备,主要通过访问设备内的寄存器;来达到控制目的的,因此我们讨论如何访问硬件,就成了如何访问这些寄存器了。2.访问流程:包括地址映射和读写寄存器地址映射:linux系统中,无论是内核程序还是用户程序都只能使用虚拟地址,而芯片手册所给的寄存器或者RAM地址则是物理地址,无法直接使用,因此,我们读写寄存器的第一步就是将他的物理地址映射虚拟地址。动态映射: 所谓动态映射,是指原创 2015-12-14 16:32:16 · 1206 阅读 · 0 评论 -
通过nat模式实现虚拟机下linux与电脑主机的互通
前言:有有些时候笔记本电脑无法联网,导致桥接模式下samba服务器不能使用;因此虚拟机采用nat模式来实现非联网状态虚拟机下linux与电脑主机的互通。1.什么是NAT方式?NAT方式的原理是把电脑主机设置成了NAT主机,电脑有两块网卡,一个实际的物理网卡,另一个就是虚拟网卡8(即VM8),物理网卡主要是连接公网WLAN,而虚拟网卡8是连接内部LAN,所以这样一来,虚拟机就相当于内部LAN中的一台电原创 2015-12-11 19:03:43 · 18130 阅读 · 7 评论 -
linux守护进程程序设计
1.什么是守护进程?守护进程,也就是通常说的daemon进程,是linux中的一种服务进程。它的特点是:不占用控制终端(后台运行)独立于控制终端(tty是个?)周期性运行2.守护进程设计要素后台运行 守护进程需要独立于任何一个控制终端。实现方法调用是通过创建子进程来充当守护进程,而父进程退出,这样子进程就可以在后台运行。 例如: pid = fork(); if (pid>0)原创 2015-12-11 17:53:21 · 586 阅读 · 0 评论 -
UDP网络程序设计
1.UDP网络编程模型 服务器 客户机 创建套接字 创建套接字 绑定IP地址 发送/接收 接收/接收 关闭连接 关闭连接注意: UDP协议不是基于连接的通信协议2.UDP通信编程函数UDP协议与TCP模型函数,不同的是发送和接受函数不一样。接受函数 函数名:sendto 函数原型:ssize_t sendto(int sockfd,const void原创 2015-12-10 16:13:48 · 409 阅读 · 0 评论 -
TCP网络程序设计
1.TCP编程模型tcp特点:基于连接的通信,也就是要想通信必须首先建立连接。编程模型 服务器 客户机 创建套接字 创建套接字 绑定IP地址 监听端口 等待连接 连接服务器 收/发数据 收/发数据 结束连接 结束连接三次握手含义:客户机请求连接,服务器回复连接,连接建立客户机发送数据。注意:绑定地址就是将服务器ip地址和端口绑定在一起,原创 2015-12-09 17:42:37 · 469 阅读 · 0 评论 -
linux多线程程序设计
1、核心理论为什么需要线程? 为了提高完成一个任务的速度,我们创建了多个进程去完成一个任务,但是多个进程间有相同的地方(例如代码相同,所使用的数据相同),同时工作时就造成了资源的浪费;为了避免资源浪费,我们进程间相同的部分分割出来,不同的部分就形成了一个小小的线程。线程概念(特点): · 线程就是“轻量级”的进程。(linux中不存在线程这个机制) · 线程与创建他的进程共享代码段、数据段原创 2015-11-17 18:42:47 · 587 阅读 · 0 评论 -
linux进程间的通信--共享内存
1.核心理论共享内存概念:共享内存是IPC机制中的一种。顾名思义,它允许两个不相关的进程访问同一段内存,这是传递数据的一种非常有效的方式。 通俗的讲,共享内存就是进程A产生的数据放在内存中某个位置,进程B可以从这个内存位置访问B产生的数据2.函数学习共享建立内存步骤:新建共享内存块→映射到进程内存空间→断开与进程的联系→删除共享内存块创建共享内存 函数名:shmget 函数原型:int原创 2015-11-17 18:28:28 · 412 阅读 · 0 评论 -
linux进程间的通信--信号量同步
1.核心理论进程的同步:是指一组并发的进程互相合作互相等待,使得各进程按照一定的顺序执行的过程叫做进程同步。同步与互斥的区别:同步时信号量初始值为0,互斥时信号量初始值大于0。 解释:如果用信号量互斥的话,必须是生产者进程先执行。如果采用信号量同步的话,那么那么生产者和消费者的执行顺序不影响结果2.进程同步编程实例消费者与生产者的关系 生产者进程:创建一个文件,向文件中写入字符,二者之间原创 2015-11-17 17:13:24 · 1544 阅读 · 0 评论 -
linux进程间的通信机制——信号
1.核心理论信号:在linux中信号是一个古老的进程间的通讯机制,就像古代烽火台所起到的传递信号的作用一样。信号处理流程 信号通讯机制就分为三步:选择信号→发送信号→处理信号信号类型 linux系统支持的所有信号均定义在usr/include/asm/signal.h中,其中常见的信号有: SIGKILL:杀死进程 SIGSTOP:暂停进程 SIGCHLD:子进程停止货结束时用来通知原创 2015-11-15 16:56:26 · 385 阅读 · 0 评论 -
C语言关键字解析(一)
我参加嵌入式软件开发的笔试时,经常会遇到直接或者间接考察对C语言中一些关键字含义的理解,所以今天我就简单的总结一下。1.关键字static(1)保持变量持久。在函数体内,一个被声明为静态变量的变量,在这个变量被调用的过程中保持其实上次调用后的值,并不会被初始化。该变量在程序开始运行时就被初始化,也是唯一的一次初始化。其存储在全局存储区。 file1.c#include <stdio.h>int p原创 2015-11-04 13:49:17 · 724 阅读 · 0 评论