LINUX
文章平均质量分 80
她的睫毛613
这个作者很懒,什么都没留下…
展开
-
字符设备的信号量,阻塞和非阻塞,poll实现
信号量的结构体定义如下:linux+v2.6.28/include/linux/semaphore.h:struct semaphore { spinlock_t lock; //自旋锁 unsigned int count; struct list_head wait_list; //内核的双向链表};初始化信号量原创 2014-06-06 20:32:43 · 512 阅读 · 0 评论 -
C语言排序算法总结
排序算法一直都是让我头疼的算法。为了全面掌握排序算法,我就整理了常用的排序算法。首先我们来了解一些基本概念:(1)稳定排序和非稳定排序简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就说这种排序方法是稳定的。反之,就是非稳定的。 比如:一组数排序前是a1,a2,a3,a4,a5,其中a2=a4,经过某种排序后为a1,a2,a4,a3,a5,则我们说这种排序是稳定的原创 2014-06-06 20:31:36 · 289 阅读 · 0 评论 -
LED写成字符设备并加入内核的方法
问题描述写一个模块,让他开机自动加载在第一步的代码里面添加代码,让LED2在系统启动的时候闪烁10s在第二步的代码里面添加字符驱动的框架,再将编译好的模块添加到ARM板上,让其在系统启动的时候运行。继续修改第三步的代码,使其能自动在dev目录下建立设备节点,可以使用例如”Echo "1" >/dev/led“来控制LED。将第四步的代码添加到内核中,使其可以通过make menuconfig将其配原创 2014-06-06 20:31:34 · 379 阅读 · 0 评论 -
内存移动-很容易混乱的题
内存移动的问题重点在于考虑内存重叠的区域处理。这是对内存地址空间和处理问题能力的综合考验。我今天就遇到了这样一道面试题:重写strcpy(),题目是这样定义函数的:char *strcpy(char *strDest, const char *strSrc);要是以前对于我来说,直接就会这样写了:char *strcpy(char *strDest, const char *strSrc){原创 2014-06-06 20:31:32 · 274 阅读 · 0 评论 -
将自己的模块编译进入内核
学习嵌入式linux必须能把自己的驱动模块编译进内核。它其实很简单,只需要改写两个文件就ok了,他们是:Kconfig和Makefile.例如我写了一个led的驱动程序:lanpeng@lanpeng-desktop:~/led$ lsled.c Makefilelanpeng@lanpeng-desktop:~/led$ cat Makefile obj-$(CONFIG_LED_LAN)原创 2014-06-06 20:31:07 · 299 阅读 · 0 评论 -
myshell
#include stdio.h>#include stdlib.h>#include string.h>#include unistd.h>void FenliCanshu(int *argc,char argv[100][256], char *arg[100]);//分离参数void Exec_cmd(char *arg[100]);//执行命令voi原创 2014-06-06 20:31:01 · 334 阅读 · 0 评论 -
自己写的小ls
/* *只支持当前目录下的-a, -l, -al的显示。希望对初学者有所帮助。 */#include stdio.h>#include stdlib.h>#include string.h>#include time.h>#include sys/stat.h>#include unistd.h>#include sys/types.h>#include linux/l原创 2014-06-06 20:30:56 · 262 阅读 · 0 评论 -
Qt4的QDialog和QWidget
#include QApplication>#include QPushButton>#include QDialog>#include QGridLayout>#include QWidget>#include QLineEdit>#include QFrame>class LanQtem: public QWidget //(1){ public原创 2014-06-06 20:30:54 · 468 阅读 · 0 评论 -
出现单边帐,该如何处理!
使用银行卡消费时,经营者会让你在交易单据上签字。消费者签名前应注意卡号、金额是否正确,确认无误后方可签名。签名样式应与在信用卡背面的签名一致,切勿签署金额空白或填写未完全的签购单。签购单要妥善保留,以备日后与对账单核对,或发生争议时向银行提供;消费者在POS机上刷卡消费时,难免遇到网络故障、通讯线路及其他异常情况,这时不要惊慌,可以通过查询、投诉的方式解决银行暂时无法核对的错账,督促银行及时将长款原创 2014-06-06 20:33:08 · 5598 阅读 · 0 评论 -
本土战略 Ubuntu创始人宣布将发中国版
2011年01月20日 00:05 来源:it168网站 作者:孟庆 编辑:孟庆 【IT168 专稿】日前,开源世界的明星人物,Ubuntu Linux系统的创始人Mark Shuttleworth先生(下称Mark)来到了北京,在接受记者采访的同时也阐述了Ubuntu未来的发展计划,并郑重宣布Ubuntu Linux将推出针对中国市场专门研发的中国版本。 Mark表示,在原创 2014-06-06 20:33:06 · 346 阅读 · 0 评论 -
U-Boot中Makefile的学习
U-Boot中Makefile的学习给了我很大的启发。它让我深刻地体会到了make工具对大的工程和项目的完美控制。我觉得自己真的已经爱上了Makefile。这里还是以一个简单的“hello,world”程序为例,来诠释一下我所体会到的Makefile的强大之初。现在来看一下我对这个简单程序所创建的文件夹和总控Makefile文件:原创 2014-06-06 20:31:56 · 270 阅读 · 0 评论 -
2.6内核字符设备驱动程序解析(续)
在调用 cdev_add()函数向系统注册字符设备之前,应首先调用 register_chrdev_region()或 alloc_chrdev_region() 函数向系统申请设备号,这两个函数在 中可以招到,其原型是:引用int register_chrdev_region(dev_t first, unsigned int count, const char *name);int alloc原创 2014-06-06 20:32:31 · 296 阅读 · 0 评论 -
ARM-Linux下交叉编译lzo
进入lzo-2.03目录下:lzo-2.03$ ./configure --host=arm-unknown-linux-gnu --prefix=/home/lanpeng/arm-lzo参数解释:--host=--host=arm-unknown-linux-gnu 是你的交叉编译工具的名字。--prefix=/home/lanpeng/arm-lzo是你的安装路径。执行这条命令后,con原创 2014-06-06 20:32:07 · 1182 阅读 · 0 评论 -
iconv的使用方法
iconv 的使用方法 iconv---编码转换用法: iconv [选项...] [文件...]有如下选项可用:输入/输出格式规范:-f, --from-code=名称 原始文本编码-t, --to-code=名称 输出编码信息:-l, --list 列举所有已知的字符集输出控制:-c 从输出中忽略无效的字符-o, --output=FILE 输出文件-s, --原创 2014-06-06 20:31:45 · 1435 阅读 · 0 评论 -
linux2.6调度分析
/*首先我先说一下操作系统进程调度的重要性。我们都知道,linux的所有进程是并发执行的。进程调度,其实质是把处理器公平,合理,高效的分配给各个任务,以使进程的并发执行达到类似并行的效果。调度是实现多任务并发执行的必要手段。 负载指的是可运行进程的平均数,以及因此而等待CPU的时间。 进程运行时间的长短由它的优先级来确定,进程在最初执行的时候有一个静态优先级,同时在执行的时候还有一个原创 2014-06-06 20:30:41 · 277 阅读 · 0 评论 -
linux2.6内核信号量学习
信号量(semaphore)是用于保护临界区的一种常用方法。只有得到信号量的进程才能执行临界区代码,而没有得到信号量的进程进入休眠等待状态。Linux系统中与信号量相关的操作主要有如下4种。1 定义信号量下面代码定义名为sem的信号量。struct semaphore sem;struct semaohore结构体在内核中定义如下:在/include/linux/semap原创 2014-06-06 20:32:18 · 257 阅读 · 0 评论 -
ARM-Linux下交叉编译opessl-1.0.0
本次任务是要完成嵌入式Linux下对openssl程序的支持。 我的开发环境:ARM9开发板 和 嵌入式Linux操作系统。装有Linux系统(我的是ubuntu9.04)的PC机一台。串口和串口连接线。串口调试软件:minicom。交叉编译工具:arm-unknown-linux-gnu-gcc 下载最新版本的openssl-1.0.0: http://www.openssl.原创 2014-06-06 20:32:05 · 364 阅读 · 0 评论 -
linux静态库和动态库分析
1.什么是库在windows平台和linux平台下都大量存在着库。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。由于windows和linux的本质不同,因此二者库的二进制是不兼容的。本文仅限于介绍linux下的库。2.库的种类linux下的库有两种:静态库和共享库(动态库)。二者的不同点在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。原创 2014-06-06 20:31:54 · 219 阅读 · 0 评论 -
printf之栈问题
其实printf在打印多个值时也是使用了进出栈的操作的。而且是从右向左进出栈的(至少GCC是这样)。不信我们来看如下代码:int i = 8;printf("%d %d", i++, i--);大家运行一下,结果:7 8是不是有些不懂啊?我刚开始也不懂,不过现在明白了。ok,让我们来看一下它是如何利用栈来打印结果的:首先说i--,它先要进栈。但是i--是一个表达式,到底是先计算后再进栈还是先进栈再原创 2014-06-06 20:31:21 · 814 阅读 · 0 评论 -
一个程序,让你清楚区分二进制文件和文本文件
从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。 ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:ASC码 0011010100110110 00110111 00111000 十进制码 5 6 7原创 2014-06-06 20:33:04 · 433 阅读 · 0 评论 -
进程间通信--信号量+共享内存
信号量是一个计数器,常用于处理进程和线程的同步问题,特别是对临界资源访问的同步。获取一次信号量的操作就是对信号量减一,而释放一次信号量的操作就是对信号量加一。Linux内核为每个信号集提供了一个semid_ds数据结构.该结构定义如下(linux/sem.h):/* Obsolete, used only for backwards compatibility and libc5 compiles原创 2014-06-06 20:32:45 · 330 阅读 · 0 评论 -
Linux2.6 DM9000驱动模编译为模块
对于linux2.6内核的源代码中,DM9000的驱动程序已经封装好了。它被加入到platform驱动中:在 linux2.6.17/drivers/net/dm9000.c:1199 static int __init1200 dm9000_init(void)1201 {1202 printk(KERN_INFO "%s Ethernet Driver\n", CARDN原创 2014-06-06 20:32:41 · 243 阅读 · 0 评论 -
结构体对齐详解
#includestruct A{double l;int i;int b;char c;};int main(){ struct A m[2]; printf("%d\n", sizeof(struct A)); pri ... }每个特定平台上的编译器都有自己的默认“对齐系数”(也叫对齐模数)。程序员可以通过预编译命令#pragma pack(n),n原创 2014-06-06 20:32:20 · 429 阅读 · 0 评论 -
tcpdump命令详解(整理)
今天门户遇到了超量的链接,整理了一个tcpdump的命令说明,留作备用簡易使用法: (為了抓到隱藏在 Code 裡的語法, 直接看port有傳什麼資料進來)sudo tcpdump -nnnX -s 1500 port 3306sudo tcpdump -aXXX port 3306 | grep denied-s : 抓比較長的 data 做一筆記錄tcpdump採用命令行方式,它的命令格式原创 2014-06-06 20:33:13 · 1044 阅读 · 0 评论 -
linux内核可变参数分析
首先来看源代码,来自:linux+v2.6.28/include/acpi/platform/acenv.h: (line 274) typedef char * va_list;/* * Storage alignment properties */#define _AUPBND (sizeof (acpi_native_原创 2014-06-06 20:32:59 · 271 阅读 · 0 评论 -
linux MTD 源码分析-word文档
文件:linux-MTD源码分析_Your-MTD.rar大小:77KB下载:下载 管理员在2009年8月13日编辑了该文章文章。 --> -->原创 2014-06-06 20:32:14 · 295 阅读 · 0 评论 -
链表
#include stdio.h>#include stdlib.h>#include malloc.h>typedef struct node{ char data; struct node *next;}Nnode,*Link;/* *Fun Name: InitLink *Fun Could: Create a Link原创 2014-06-06 20:31:43 · 209 阅读 · 0 评论 -
linux2.6内核模块的编译
首先将下面的程序写进一个hello1.c的文件里:#vim hello1.c#include "linux/module.h"#include "linux/kernel.h"#include "linux/init.h"static int __init lkp_init(void){printk(" Hello,world!From the kernel space...\n");return原创 2014-06-06 20:30:43 · 421 阅读 · 0 评论 -
ps -aux 详解
显示其他用户启动的进程(a)查看系统中属于自己的进程(x)启动这个进程的用户和它启动的时间(u)使用“date -s”命令来修改系统时间比如将系统时间设定成1996年6月10日的命令如下。#date -s 06/10/96将系统时间设定成下午1点12分0秒的命令如下。#date -s 13:12:00-----------------------------原创 2014-06-06 20:32:47 · 521 阅读 · 0 评论 -
CPU的规则和体系结构综述
一. 指令规则任何CPU都只有两类指令1.顺序指令:当前指令正确执行的结果不影响下一条指令读取地址,CPU据当前指令宽度递增下一条指令读取地址2.分支指令:当前指令正确执行的结果影响下一条指令读取地址,CPU据当前指令执行结果产生下一条指令读取地址二. 硬跳转(中断和异常)规则1.通常情况下,CPU的指令读取和执行都是按照上述一的规则进行的。定义:硬跳转是CPU正常执行指令的过程被硬件设备的中断或原创 2014-06-06 20:32:01 · 235 阅读 · 0 评论 -
linux内核双向循环链表实例
//list.h#ifndef _LIST_H#define _LIST_H/** *内核里的双向循环链表 *是一个只有指针域而没有数据域的结构 */ struct list{ struct list *prev, *next;};#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LI原创 2014-06-06 20:31:47 · 429 阅读 · 0 评论 -
内核空间和用户空间
Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G。Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G字节(从虚拟地址0x00000000到0xBFFFFFFF),供各个进程使用,称为“用户空间)。因为每个进程可以通过系统调用进入原创 2014-06-06 20:31:41 · 241 阅读 · 0 评论 -
iconv的转化脚本
#!/bin/shecho "欢迎使用Win-Linux转化系统..."if test 1 -ne $# then echo "请添加一个参数!" exit 1fi#echo $#file="$1"fileTmp=".LAN_TMP_LAN"if [ -e $file ]; theniconv -c -f gb231原创 2014-06-06 20:33:24 · 334 阅读 · 0 评论 -
读者-写者实现
/* * Reader-Writer是指保证一个Writer进程必须与其他进程互斥地访问共享对象的同步问题 */#include linux/init.h>#include linux/module.h>#include linux/sched.h>#include linux/sem.h>struct semaphore sem_r;struct semaphore sem_w;int read原创 2014-06-06 20:30:59 · 364 阅读 · 0 评论 -
内核双向循环链表之旅
为了完成对内核双向循环链表的彻底掌握,我搜索了一些重要信息。可是到最后还是被内核的代码给卡住了。我的过程如下:首先在linux-2.6.30.4/include/linux/list.h里找到内核的双向链表结构:struct list_head { struct list_head *next, *prev;};它是一个只有指针域而没有数据域的结构,这样的好处就是灵活性很强!并且控制起来也很原创 2014-06-06 20:31:38 · 364 阅读 · 0 评论 -
C语言关键字之const
const关键字是嵌入式程序员必须熟悉的。因为它的使用可以增加程序的健壮性,并且使读者更好地理解程序。它所修饰的变量被叫做“只读变量”。注意“只读变量”!=“常量”。千万不要说被const所修饰的变量就是常量!那只能说明你对const还不太理解!下面就让我们来分析一下const。首先看以下定义:const int a = 3;int const a = 3;const char原创 2014-06-06 20:31:23 · 274 阅读 · 0 评论 -
个人简历
个人简历 文件:简历.doc.rar 大小:6KB 下载:下载 管理员在2009年8月13日编辑了该文章文章。 --> -->原创 2014-06-06 20:31:16 · 278 阅读 · 0 评论 -
linux-C直接调用SO动态库和生成SO动态库的函数
C代码 #include #include int main(void){ int (*myadd)(int a,int b);//fuction pointer void *handle;原创 2014-06-06 20:34:01 · 768 阅读 · 0 评论 -
Linux ELF文件学习(1)
ELF头文件学习ELF文件原名Executable and Linking Format,译为“可执行可连接格式”。ELF规范中把ELF文件宽泛的称为“目标文件”,这与我们平时的理解不同。一般的,我们把编译但没有链接的文件(比如Linux下的.o文件)称为目标文件。而ELF文件仅指链接好的可执行文件。在ELF规范中,所用符合ELF规范的文件都成为ELF文件,也成为目标文件,这两个名字意义相原创 2014-06-06 20:33:01 · 287 阅读 · 0 评论 -
回调函数解析
回调函数是一个通过函数指针调用的函数。如果你把函数指针(函数的入口地址)传递给另一个函数,当这个函数指针被用来调用它所指向的函数时,我们就说这个函数是回调函数。回调函数实例应用:1、问题描述。先看一个小例子:Link Search_List (Link L, int value) { Link r; r = L->next; while (r!= NULL)原创 2014-06-06 20:32:25 · 327 阅读 · 0 评论