自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ubuntu12.04 gedit 打开 windows 分区中的 txt 文件乱码

解决办法:终端里依次输入以下2 条命令即可:gsettings set org.gnome.gedit.preferences.encodings auto-detected "['GB18030', 'GB2312', 'GBK', 'UTF-8', 'BIG5', 'CURRENT', 'UTF-16']"      gsettings set org.gnome.ge

2015-05-31 18:54:29 404

原创 linux块设备驱动与其测试

1 我把U盘插到USB口上了,下一步我该如何做才能查看U盘里的内容? 我不能确定你的Linux系统会不会自动加载。所以,你应该先去/media目录下查看一下,看看是不是已经自动加载上了。如果是的话,应该在/media里有一个目录,名字类似于disk,你进入目录就等于进入你的U盘了。 如果/media没有你想要的东西,那就要自己mount了! $mkdir /mnt/usb $mo

2015-05-31 15:38:20 1146

原创 linux中mmap函数

0 前言:  kmalloc() vmalloc()  malloc()三个内存函数kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续,malloc不保证任何东西kmalloc()用于申请较小的、连续的物理内存  kmalloc() 分配的是物理地址vm

2015-05-29 14:55:31 440

原创 linux驱动程序中的异步编程

linux驱动程序中的异步编程A前面介绍的等待队列和轮询编程提供了较好的解决设备访问的机制,但是这些机制都是由应用程序发起的,都需要应用程序主动访问设备。更完美的方式是由驱动程序主动通知应用程序,也就是说,当驱动程序满足某些条件后,会主动通知应用程序处理,这些处理方式有些像面向对象编程的事件,而在linux内核使用的事件是接下来要介绍的信号。#include

2015-05-29 10:17:13 613

原创 linux内核定时器驱动一个简单例子

linux内核定时器 A使用步骤:1 定义定时器结构体变量struct  timer_list    timer;2  初始化内核定时器init_timer(struct  timer_list *timer)3  对timer_list成员变量进一步初始化 timer.function=&fun(); timer.expires

2015-05-28 19:52:17 2345

原创 linux中断的顶半部和底半部

linux中断底部和顶部的由来:在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理。 为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux 将中断处理程序分解为两个半部:顶半部(top  half)和底半部(bottom half)。 中断处理例程应该尽可能的短,执行一个长时间的任务时最好的方法是使用底半部机制。

2015-05-28 16:09:48 2151

原创 linux驱动之等待队列

等待队列工作过程就是睡眠和唤醒的过程使用:static DECLARE_WAIT_QUEUE_HEAD(button_waitq);     //定义初始化等待队列头wake_up_interruptible(&button_waitq);              //唤醒  发出wait_event_interruptible(button_waitq, e

2015-05-28 12:12:36 1189

原创 linux驱动之 信号量 自旋锁 互斥体

原子操作原子操作就是单位操作,也就是说操作过程不能被中断下面代码中每条语句看起来是原子操作,其实不是原子操作;int main(0{int i=2;//两天汇编语句组成i=i+3;//三条汇编语句组成}实现原子操作方法;1  自旋锁   自旋锁它是为为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥

2015-05-28 10:40:39 822

原创 基于linux2.6.30.4和s3c2440的PWM驱动

1ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。大部分驱动需要 -- 除了读写设备的能力 -- 还要通过设备驱动进行各种硬件控制的能力. 大部分设备可进行超出简单的数据传输之外的操作; 用户空间必须常常能够请求, 例如, 设备锁上它的门,弹出它的介质, 报告错误信息, 改变波特率, 

2015-05-27 21:40:39 517

原创 linux静态编译一个驱动进内核(将驱动目录加入)

一、准备好可以正常引导开发板的源码二、在内核源码kernel文件夹的driver目录下,创建led_arm文件夹        mkdir drivers/led_arm三、将“LED驱动实验”的驱动程序拷贝到led_arm目录下(详情见上一次LED驱动博客)       将led.c拷贝在该文件夹下面Kconfig就是对应着内核的配置菜单。假如要想添加新的

2015-05-27 19:57:50 1735

原创 基于linux2.6.30.4的s3c2440的led字符驱动

1 driver#include     #include     #include     #include     #include     #include     #include     #include     #include     #include     #include     #include     #inc

2015-05-27 11:05:42 457

原创 基于linux2.6.30.4的s3c2440的ADC驱动

1   driver   ADC设备在Linux中可以看做是简单的字符设备,也可以当做是一混杂设备(misc设备),这里我们就看做是misc设备来实现ADC的驱动。注意:这里我们获取AD转换后的数据将采用中断的方式,即当AD转换完成后产生AD中断,在中断服务程序中来读取ADCDAT0的第0-9位的值(即AD转换后的值)。    #include      #include /

2015-05-27 10:40:42 497

原创 基于liunx2.6.30.4的s3c2440的按键外部中断驱动

#include #include #include #include #include #include #include #include #include #include #define DEVICE_NAME     "buttons"   #define BUTTON_MAJOR    232      struct bu

2015-05-26 20:23:21 723

原创 基于linux2.6.30.4和s3c2440的 platform总线 led驱动

1  basicplatform模型驱动编程,需要实现platform_device(设备)与platform_driver(驱动)在platform(虚拟总线)上的注册、匹配,相互绑定,然后再做为一个普通的字符设备进行相应的应用,总之如果编写的是基于字符设备的platform驱动,在遵循并实现platform总线上驱动与设备的特定接口的情况下,最核心的还是字符设备的核心结构:cdev、

2015-05-26 16:00:35 777

原创 基于linux2.6.30.4的s3c2440寄存器的虚拟地址和物理地址的关系ioremap()

1 想一次修改某个目录下所有文件的权限,包括子目录中的文件权限也要修改,要使用参数-R表示启动递归处理。刚开始学字符设备驱动,感觉最难的是驱动和底层硬件的连接。linux上的驱动程序,是基于操作系统之上的,他并不直接和底层的硬件打交道,但是我们写的驱动必须能使硬件“跑”起来,即与硬件紧密相连。就拿最简单的LED驱动来说,我们的驱动程序是在虚拟的内存上面跑的,但是最终,LED的点亮还

2015-05-26 11:02:25 1349

原创 基于linux2.6.30.4的s3c2440串口驱动测试

1 linux终端(串口)在2440开发板中三个串口设备对应如下     串口名字                      主设备号               次设备号s3c2410_serial0            204                   64s3c2410_serial1            204                   65

2015-05-25 19:33:53 1145

原创 制作Linux根文件系统关于链接库的问题

1.应用程序执行需要库的支持在制作自己的发行版时经常需要判断某条命令需要哪些共享库文件的支持,以确保指定的命令在独立的系统内可以可靠的运行;在Linux环境下通过ldd命令即可实现,在终端下执行:ldd   /bin/ls 。即可得到/bin/ls命令的相关共享库文件列表:libtermcap.so.2 => /lib/libtermcap.so.2 lib

2015-05-24 22:20:31 518

原创 gec2440最简单的一个内核编译 linux2.6.30.4

A 最简单的内核编译:vim 打开 Makefile,修改为:ARCH=armCROSS_COMPILE=/home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/binmake s3c2410_defconfig解释:因为2410和2440很多地方是一样的,可以用2410的配置文件为基础来配置内核。

2015-05-23 21:27:12 512

原创 Linux下软件安装方法总结和开发常常碰到揪心问题

Linux下软件安装方法总结rpm包安装方式步骤:1、找到相应的软件包,比如soft.version.rpm,下载到本机某个目录;2、cd soft.version.rpm所在的目录;3、输入rpm -ivh soft.version.rpmdeb包安装方式步骤:1、找到相应的软件包,比如soft.version.deb,下载到本机某个目录;2、cd soft.

2015-05-22 22:02:22 1168

原创 ARM-Linux问题集锦

1  #define GPBCON (*(volatile unsigned long *)0x56000010)的理解A:volatile   当计算机需要一个数值的时候,会先把内存中(ARM处理寄存器地址)的值读取到寄存器(这里指的是r0-r1....r15),然后下次在使用该值的时候就直接读取寄存器(r0-r1....r15)中的值了。加上volatile之后,程序就

2015-05-22 19:48:46 364

原创 ubuntu12.04下使用minicom下载文件到ARM开发板

一: 安装minicom 注意设置下面的地方:  设置默认上传/下载的目录,选择Filenames and paths , 会看到这样的选项:    +-----------------------------------------------------------------------+    | A - Download directory : /home/lin

2015-05-22 14:22:04 1766

原创 ubuntu12.04和gec2440搭建NFS服务器 优盘传输文件

nfs服务搭建NFS服务器端 (PC机)sudo apt-get install nfs-kernel-server  (安装NFS服务)sudo /etc/init.d/portmap restartsudo /etc/init.d/nfs-kernel-server restartsudo ifconfig eth0 192.168.100.100

2015-05-22 10:42:06 469

原创 ubuntu12.04下安装第三方QQ

第一种方法:1打开Pidgin,你会发现里面支持了好多功能,但是就是木有QQ,瞬间觉得被我坑了,有木有?别急,咱们继续往下面看2现在打开终端,系统默认是 ctrl+alt+T 快捷键3先输入 sudo add-apt-repository ppa:lainme/pidgin-lwqq 会提示你输入密码,你输入一下系统密码4再输入 sudo apt-get update

2015-05-20 21:46:46 374

原创 linux下wine神器

Ubuntu下使用wine安装Windows下的exe文件       工作环境为Ubuntu12.04,类Linux系统。无法直接安装exe文件。借助Wine可以安装,但并不是所有Windows下的exe软件都可以使用Wine进行安装。有两种方式可以安装Wine到Ubuntu上。可以自己本地编译源码,也可以在终端中执行命令“sudo apt-get install wine”,便自动从配

2015-05-20 17:08:53 562

原创 Ubuntu12.04下sqlite安装和使用例子(一)

知道学习嵌入式技术,数据库是必须懂的,看的书上嵌入式的教程都在用,看来我是非学不可了,下面就简单的记录一下我在Ubuntu 12.04系统上安装 SQLite 的过程以及使用。安装1、首先建一个文件夹,这里我命名为 sqlite,如下,它的路径为 /home/song/sqlite2、进入 sqlite 文件夹,执行命令:sudo apt-get

2015-05-20 11:32:35 359

原创 linux下C++学习(一)

C++头文件位置:/usr/include/c++ 这个下面就是C++标准头文件test.cpp:#include //注意这里  不是iostream.h#include using   namespace   std; class CRect{private:char color[10];int left;int top;int length;

2015-05-20 10:43:20 464

原创 linux驱动头文件位置查找

在不同版本的内核源码上,头文件所在的位置是不同的,比如说在#include#include同样是regs-gpio.h,是在比较低的版本(比如2.6.25)上位于arch/arm/include/asm中,而mach/regs-gpio.h则是位于arch/arm/mach-s3c2410/include/mach中,2.6.30版本的内核是这种结构,所以,要根据所采用的不同的版本内核

2015-05-19 15:56:50 2507

原创 ARM裸机编程 (汇编运行地址,链接地址,加载地址,存储地址 位置无关码、位置有关码)

搞ARM开发时,在连接目标代码会提到运行地址和加载地址。这两者有什么区别呢?其次,网上也有说链接地址和存储地址,那么这四个地址之间有什么区别?1、运行地址链接地址:他们两个是等价的,只是两种不同的说法。2、加载地址存储地址:他们两个是等价的,也是两种不同的说法。运行地址:程序在SRAM、SDRAM中执行时的地址。就是执行这条指令时,PC应该等于这个地址,换句话说,PC等于这个地

2015-05-19 09:18:28 2203 1

原创 linux网络通信(TCP和UDP)

1 TCP方式2  服务器/*server.c*/#include #include #include #include #include #include #include #include #define PORT 4321#define BUFFER_SIZE  1024#define MAX_QUE_CONN_NM   5int

2015-05-18 16:02:09 894

原创 Makefile自动生成 autoconf 和 automake

从helloworld 入手sudo apt-get install autoconf我们从大家最常使用的例子程序helloworld 开始。下面的过程如果简单地说来就是:新建三个文件:helloworld.cconfigure.inMakefile.am然后执行:aclocal; autoconf; automake --a

2015-05-18 11:46:23 763

原创 简单Linux C线程池

大多数的网络服务器,包括Web服务器都具有一个特点,就是单位时间内必须处理数目巨大的连接请求,但是处理时间却是比较短的。在传统的多线程服务器模型中是这样实现的:一旦有个请求到达,就创建一个新的线程,由该线程执行任务,任务执行完毕之后,线程就退出。这就是"即时创建,即时销毁"的策略。尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数非常频繁,那么服

2015-05-18 09:35:53 362

原创 linux线程学习-信号量

1 基础篇#include#include#includevoid thread1(void){   int i=0;while(i{     printf("i= %d in pthread1\n",i);     i++;   sleep(5);}  pthread_exit(0);}void thread2(void)

2015-05-17 15:21:02 394

原创 linux进程和文件操作 (基础)

1 file.c// 带缓存的 IO 操作  带缓存的文件 IO 操作是在内存中开辟一个“缓冲区”,为程序中的每一个文件使//用。当执行读文件的操作时,从磁盘文件中将数据先读入内存“缓冲区”,装满后再从//内存“缓冲区”依次读入接收的数据。反之亦然。//想对于  不带缓存的IO 操作:其操作函数都为  open   write  #include #includ

2015-05-17 10:39:31 380

原创 shell编程基础 脚本

shell基础学习1 Shell 常用命令(1,2)echo "hello world"(3)export 变量    变量带入子进程export    显示所有环境变量和内容(4)readonly命令格式 1:readonlyvariable功能:将一个用户自定义的 shell 变量标识为不可变。命令格式 2:readonly功能:显示

2015-05-16 11:47:07 440

原创 自己写的一个多文件的makefile的例子

1.源程序:main.c:#include "my1.h"#include "my2.h"int main(){mytool1_print("hello mytool1!");mytool2_print("hello mytool2!");return 0;}my1.h:#include #ifndef _MYTOOL_1_H#defin

2015-05-15 16:31:10 435

原创 linux GDB调试器的使用

Gdb 调试器调试是所有程序员都会面临的问题。如何提高程序员的调试效率,更好更快地定位程序中的问题从而加快程序开发的进度,是大家共同要面对问题。就如读者熟知的Windows 下的一些调试工具,如 VC 自带的如设置断点、单步跟踪等,都受到了广大用户的赞赏。那么,在 Linux 下有什么很好的调试工具呢?本文所介绍的 Gdb 调试器是一款 GNU 开发组织并发布的 UNI

2015-05-15 15:43:18 397

原创 gcc编译流程和 gcc静态库和动态库(二)

Linux GCC常用命令1示例程序如下:复制代码//test.c#include int main(void){    printf("Hello World!\n");    return 0;}复制代码这个程序,一步到位的编译指令是:gcc test.c -o test实质上,上述编译过程是分为四个阶段进行的,即预处理(也称

2015-05-15 10:44:12 367

原创 gcc编译流程和 gcc静态库和动态库(一)

1 Gcc 编译流程如本章开头提到的,Gcc 的编译流程分为了 4 个步骤,分别为:预处理(Pre-Processing)编译(Compiling)汇编(Assembling)链接(Linking)下面就具体来查看一下 Gcc 编译器是如何完成 4 个步骤的。首先,有以下 hello.c 源代码:#includeint main(){printf("

2015-05-14 21:21:57 525

原创 linux驱动之模块驱动makefile详细分析

1 makefile写法1A版本ifneq ($(KERNELRELEASE),)    obj-m :=hello.o    else    KERNELDIR :=/home/ZP1015/Desktop/linux-2.6.32.2    all:       make -C $(KERNELDIR) M=$(PWD) modules ARCH=arm CRO

2015-05-14 15:43:58 582

原创 linux主设备号和次设备号

1 杂项设备linux里面的misc杂项设备是主设备号为10的驱动设备定义头文件杂项设备的结构体:struct miscdevice{int minor; //杂项设备的此设备号(如果设置为MISC_DYNAMIC_MINOR,表示系统自动分配未使用的minor)const char *name;const stuct file_operations *fops;/

2015-05-14 10:56:48 806

空空如也

空空如也

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

TA关注的人

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