自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

我的博客

没什么新鲜事

  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 驱动调试

软件调试:1、printk打印调试 2、使用/proc文件系统调试 3、使用strace观察调试 4、使用kgdb调试 - 硬件调试: - 一般是示波器探测

2017-01-14 09:39:52 362

原创 linux配置网络

ifconfig eth0 192.168.2.12 netmask 255.255.255.0 broadcast 192.168.2.255route add defualt gw 192.168.2.1

2017-01-13 21:50:51 382

原创 ioremap

1、一般我们的外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器、数据寄存器三大类。外设的寄存器通常被连续编址,并且根据CPU的体系架构不同CPU对IO端口的编制方式有两种:IO映射方式(IO-mapped):比较典型的有X86处理器为外设专门实现了一个单独的地址空间,称为“IO端口空间”或者“IO地址空间”,此时CPU可以通过专门的指令(比如X86的IN和OUT)来访问这个“

2017-01-12 22:56:20 21361

原创 uart

1、串口驱动的模型可以依照tty驱动模型来分析:首先Uart驱动也有一个driver结构体(Uart_driver)我们也要对这个结构体进行注册:tty_driver{ struct module* owner; const char* driver_name; const char* dev_name; int major; int minor; i

2017-01-10 22:46:06 549

原创 文章标题

1、串口是控制终端的一种,所以串口驱动完全可以依据控制终端驱动的模型来分析。在tty驱动中首先会注册一个tty设备,然后会实现字符设备的file_operations结构体,得到这个结构体之后再会去fs/char_dev.c 中注册一个字符设备。所以终端设备的驱动程序本质上是一个字符设备,所以我们的串口设备也是一个字符设备。 2、终端驱动(tty驱动)的分层结构:tty核心、tty线路规程、tt

2017-01-09 22:50:34 465

原创 linux下获取系统时间

#includetime_t t;struct tm*timer;time(&t);

2017-01-08 22:33:48 450

原创 文章标题

1、Linux中的磁盘分区是MBR结构(Master Boot Record)可分为主分区和扩展分区,扩展分区又分为逻辑分区。 2、利用“sudo fdisk -l”来查看Linux中的磁盘分区情况。 3、/dev/sda1、/dev/sda2、/dev/sda3、等: 分析: [a]“sda1”中的“a”代表Linux识别的第一块硬盘,同理第二块硬盘则为“sdb”。 [b]“sda1

2017-01-06 21:43:19 234

原创 sqlite3.7.0移植

1、在源码顶层目录中运行./configure --host=arm-none-linux-gnueabi --prefix=/home/workdir/lot_system/sqlite/sqlite-arm2、make 3、make install4、将安装目录(sqlite-arm)下的bin中的sqlite3廋身(arm-none-linux-gnueabi-strip sqlite

2017-01-05 22:46:46 215

原创 0R电阻作用总结

1、可以巧妙地避免十字交叉布线,相当于一个小飞线; 2、当做测量电流的预留接口; 3、连接不同的类型的GND;

2017-01-05 21:37:54 5325

原创 www

感觉今天什么都没干!!!!!!都做些无用功~~~~我无fuck说!!!

2017-01-04 22:09:30 267

原创 vim配置

https://github.com/gmarik/vundle.git

2017-01-03 22:52:56 228

原创 boa移植

boa介绍:Boa Webserver是一个效率较高的web服务器,大小只有60kb左右,很适合于嵌入式系统的单任务的http服务器,但是它不可以实现像Apache、thttpd等高性能的服务器那样实现并发响应。Boa只有在完成一个请求之后才可以响应下一个请求。但是Boa却支持CGI,当CGI程序发出请求时,Boa可以fork出子进程为CGI服务实现并发响应。编译Boa: a、解压源码,进入sr

2017-01-03 21:10:46 560

原创 busybox

编译: a、 make menuconfig 选中busybox setting/build option/静态编译。将库编译进应用程序,使得在运行时不要依赖其它的库。然后修改交叉工具链前缀 b、make 生成了busybox_unstripped即没有廋身的busybox c、make install 默认安装在__install文件夹中 2、继续创建etc目录来完成根文件系统:

2017-01-02 20:42:46 242

原创 一生所爱

从前现在过去了再不来红红落叶长埋尘土内开始终结总是没变改天边的你飘泊白云外苦海泛起爱恨在世间难逃避命运相亲竟不可接近或我应该相信是缘分

2017-01-02 15:55:23 233

原创 Makefile实例

现在来编写下面目录结构的Makefile: 顶层目录的Makefile://顶层目录的Makefile应该是把握整个工程的编译路线的。内容如下:CFLAGS=-DDEBUG -Iinclude -I../includeexport CFLAGSall: make -C client make -C server make -C rawlist make

2016-12-31 10:50:49 311

原创 Makefile的编写

如下的目录结构,编写Makefile: (http://img.blog.csdn.net/20161230224042409?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYm95a2Ff/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)分析:这是一个

2016-12-30 23:03:14 259

原创 shell脚本创建和kill进程

1、创建进程:#!/bin/bashwhile [ 1 ] do ./client 192.168.2.25 2016 done2.杀死进程:#!/bin/bashwhile [ 1 ] do PROCESS= `ps -ef |grep client|grep -V grep| prep -V PPID |awk `{ print $2 }` f

2016-12-30 22:09:00 3449 1

原创 环境变量修改

1、在/etc/bash.bashrc中添加环境变量: export PATH=$PATH:/tools/arm-linux-none/bin/ 2、然后再使生效: source /etc/bash.bashrc

2016-12-28 18:15:01 294

原创 零长度数组

在GNU C中允许有数组长度为零的情况。如: struct var_data{ int len; char data[0]; }; char data[0]表示程序中通过var_data结构体中的data[index]成员来访问len之后的地index个地址,它可以用来携带一些长度不定的内容。假如struct var_data 的数据就保存在struct

2016-12-27 22:52:47 292

原创 Linux内核模块

1、内核模块注册注销: 块加载函数有返回值,模块卸载函数无返回值。两者都是无参函数,加载函数用_ init修饰,卸载函数用 _exit修饰。#define __init __attribute__((__section__(".init.text")))#define __exit __atrribute__((__section__(".exit,text")))static int

2016-12-27 22:40:15 192

原创 内核调试

oops:由oops得到pc的地址,然后通过arm-none-linux-gnueabi-addr2line 0x3453454j -e vmlinux -f来查看,但是当函数的嵌套调用比较多时,光是一个pc地址是无法用来定位的,此时还要借助lr和堆栈的情况来最终定位出错的源。

2016-12-26 23:01:26 342

原创 Linux内核体系架构

1. Linux内核和用户层的应用程序都有自己的保护地址空间。每个用户空间的进程都有自己的虚拟地址空间,内核则有独立的地址空间。一般情况下应用程序时无法直接访问内核空间的,要通过一个特殊的系统调用接口来访问。但是又有一个问题,当频繁的使用系统调用时,会加大系统的开销等。这就好比去银行取钱,假如我们要取1000元,那么你是一次取1000元好呢,还是分十次每次取100元好。很明显,我们是一次性就搞定的。

2016-12-26 17:30:10 301

原创 Linux内核启动参数

1、从源码目录的arch/arm/kernel/head.S文件中分析。

2016-12-25 22:57:45 241

原创 Linux内核编译

首先在源码目录下:arch/arm/kernel/vmlinux.lds的链接文件生成vmlinux。在生成Image,又有arch/arm/boot/compressed文件夹中的压缩算法将该目录下由vmlinux.lds第二次链接的一些解压等代码和Image一起压缩成arch/arm/boot/compressed目录中的被压缩之后的vmlinux。然后生成zImage。最后zImage被mki

2016-12-25 22:47:34 184

原创 Linux内核复习

1、Linux内核基本支持现有的所有文件系统,比u-boot要支持的多了很多。 2、ps ajx查看进程时,用“[]”括起来的是属于内核线程的。 3、system V的所有函数都是系统调用。 4、Linux内核源码管理工具是git。

2016-12-24 22:57:41 250

原创 init.rc中的函数分析

parse_config_file(“pathname”):这个函数是用来分析一个指定的文件的,它调用read_file()函数来读取文件parse_config()函数来分析读到的内容。int parse_config_file(const char* fn){ char* data; data = read_file(fn , 0);//将指定的文件读到内存,返回该内存的首地

2016-12-23 23:03:26 283

原创 Android的init.rc

init.rc脚本文件在Android系统启动时,主要用来设置系统的环境变量,记录待执行的进程。action list(动作列表)和server list(服务列表):它们是init进程根据init.rc 的内容生成的。init.rc文件的内容主要有两部分:以“on”关键字开头的action list(动作列表),以“server”关键字开头的server list(服务列表)。acti

2016-12-23 22:31:40 211

原创 Android的init进程

1、当Linux内核加载后就会启动第一个应用程序–nit进程,它主要提供四大功能: a:子进程的终止处理; b:应用程序访问驱动时创建设备节点,提供属性服务并保存系统的环境变量; c:分析init.rc脚本,执行相应的功能。2、几种文件系统: a、tmpfs:是一种虚拟内存的文件系统典型的tmpfs文件系统完全驻留在RAM中读写速度远远大于闪存或磁盘文件系统。 b、

2016-12-22 23:02:20 292

原创 烧写Android系统

1、编译Linux系统 2、编译Android系统: source build/ensetup.sh lunch extra-bsp make 3、烧写准备: 拷贝boot.img和system.img(在Android/out/product/fspad-733)到工具目录。 拷贝boot-source.fex(在lichee/tools/pa

2016-12-22 20:51:39 3489 1

原创 驱动复习(mor8)

操作sk_buff的函数:struct sk_buff* alloc_skb(unsigned int len , int priority);struct sk_buff* dev_alloc_skb(unsigned int len);//为sk_buff分配一个缓冲区,并初始化skb->data和skb->tail到skb->head。dev_alloc_skb()使用GFP_ATOMIC

2016-12-21 22:51:48 173

原创 驱动复习(mor8)

1、字符设备驱动程序一般在模块初始化函数中申请中断,而网卡驱动是在open函数中申请驱动。因为字符设备是连续工作的,而网卡可能有时候需要禁用(ifconfig down)。当网卡禁用之后,它的中断也就需要关掉;下一次再打开网卡时才申请中断。

2016-12-21 14:14:19 221

原创 驱动复习(mor8)

1、串口发送和接受中断发生的时机。2、Linux网路子系统、Linux网络协议栈的层次结构。3、应用程序在内核中不叫API而叫系统调用!

2016-12-20 22:52:20 257

原创 驱动复习(mor8)

驱动mmap设备操作与应用程序的mmap系统调用区别?按键驱动代码?按键初始化:struct key_info{ int irq_no; unsigned int gpio_port; int key_no;} key_info_table[4]={ {GPIO_EXINT0 ,GPIO_F1 ,1},

2016-12-20 21:41:47 256

原创 驱动复习(mor8)

内核定时器的详细说明?系统移植中在开发板上设置应用程序自启动。应用程序通过设备文件和驱动建立联系,而设备文件又通过主设备号与驱动联系。在动态获取设备号时先加载驱动再创建设备节点。应用层mmap系统调用: mmap实现将文件内容映射到内存空间的某块地址上,通过对这块内存空间的操作来实现对文件的操作,而不需要再调用read和write等操作。一、void* mmap(void* addr,

2016-12-19 22:52:03 205

原创 驱动复习(mor8)

进程几种状态:就绪态(运行态)、占有态、等待态(可中断,不可中断)、停止态、僵尸态。驱动程序无法立刻满足用户层的请求时如何处理:驱动程序应该(缺省的)进行阻塞进程,使其进入睡眠直到请求可以满足为止。阻塞型驱动操作:在阻塞型操作的驱动中,应用层调用read方法时,如果驱动中的数据不足或是没有数据可读,进程阻塞;当数据达到要求时,进程被唤醒并将数据返回给用户层。当应用层调用write的时候,驱动程序

2016-12-19 18:53:01 195

原创 驱动复习(mor8)

1、读函数分析: read函数是从内核空间读出数据到用户空间,在读出数据之前我们要检查它传进来的参数的合法性。先从file结构体中提取私有数据(Men_dev*=file->private_data);再提取读的起始位置(loff_t pos=*fps);然后判断这两者的合法性:如果读的起始位置pos比内核空间的已经存在的数据还要大(即pos>dev->size),那么这是不合法的。同样如

2016-12-18 22:58:30 179

原创 驱动复习(mor8)

1、用户空间和内核空间的交互: unsigned long copy_to_user(void _ _user*to,const void* from ,unsigned long count);unsigned long copy_from_user(void to , const void _ _user from ,unsigned long count); 2、原来这样也可以: st

2016-12-18 12:15:57 243

原创 驱动复习2(mor8)

1、注册字符设备: int register_chrdev(usigned int major , const char* name ,file operations* ops) ; 2、注销字符设备: int unregister_chrdev(unsigned int major , const char * name ); 3、完成了驱动的安装之后应该写一个应用程

2016-12-17 22:53:39 195

原创 驱动复习(mor8)

1、u-boot烧写到flash中时要选择offset为0,因为要保证u-boot在flash的0位置。 2、块设备由于有缓存,故可以随机访问。在一般的Unix中,块设备一般是一次访问512(或者512的整数倍)的大小的。但是在Linux中块设备可以按字节来访问,所以块设备可字符设备只是接口不同。 3、网络驱动的接口通常是一个硬件设备(eth0),但是也可以是一个纯软件的(回环lo),一个网络接

2016-12-17 22:28:20 185

原创 复习

Linux编译,分层。

2016-12-16 22:53:21 202

触摸屏ft5x0x驱动FT6X0X tp驱动代码 功能完整版

比较完整的触摸屏驱动,代码层次清晰,多功能多文件编写 支持10点触摸,固件升级,电源管理等扩展功能,宏开关控制

2018-05-16

空空如也

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

TA关注的人

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