自定义博客皮肤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的双链表list_head

双链表在include/linux/types.h中定义struct list_head {        struct list_head *next, *prev;};include/linux/list.h中定义了链表的操作。这个结构经常作为成员与其他数据类型一起组成一个新的结构体(后文若无特别提示,“新结构体”均指类似下面举例的嵌套型结构体),比如:

2012-08-27 13:22:51 3460

转载 printf到printk的转变

昨天下午stepbystep的为其他同学演示了内核模块编程hello,kernel!在陈老师的指导下,先为大家演示了最基本的C程序hello,world。然后又一步步的转换成内核模块程序。在这一步步的转变过程中,我也发现了自己在学习内核模块中的不足,下面将下午遇到的一些问题总结如下。一个简单的hello,world程序如下: 1#include

2012-08-27 12:50:33 467

转载 中断

从物理角度来看,中断请求是由外部硬件设备产生的一种电信号,外部设备首先将这种电信号发给中断控制器,接着中断控制器将此电信号发送给CPU。CPU检查到该中断信号后再通知内核,然后由内核完成后续的一些列处理工作。显然,内核不需要定期去检查设备,从而提高了CPU利用率。通过以上的描述,你应该对中断有了一个大致的了解,不过想要更具体的了解中断必须搞清楚以下的知识点。1.中断的分类早期以及一般情

2012-08-27 10:35:13 634

转载 在内核中新增驱动代码目录

在开始向加入驱动代码之前,我们先了解三项基本步骤:(1)将编好的源代码复制到Linux内核源代码的相应目录(2)在目录的Kconfig文件中增加新源代码对应项目的编译配置选项(3)在目录的Makefile文件中增加对新源代码的编译条目在完成上述三项工作之前,我们先看一下我们要新增的驱动的树形结构。比如我们写的驱动程序均放在edsionteDriver目录,在此目录中包含Kconfi

2012-08-27 10:27:56 692

原创 TCP、IP

Internet网络上所使用的协议正是TCP/IP(Transmission Control Protocol/Internet Protocol)协议,即传输控制协议/网际协议.IP地址的分类:网络类型 网络ID 主机IDInternet委员会定义了五种IP地址类型以适合不同容量的网络,即A类至E类。其中A、B、C三类由InterNIC(Internet网络信息信心)在全球范

2012-08-27 09:49:24 349

转载 使用vim+ctags+cscope阅读内核源码

有网络的时候,使用LXR(The Linux Cross Referencer)在线阅读源码固然是一件很爽的事情。在无网络的情况下,只通过vim进入内核源码那样查找就显得有些勉强。接下来,本文将介绍一种快速定位源码的工具:ctags和cscope。通过vim编辑器,再配合使用上述两种工具就可以快速定位想要查看的源码。好了,开始吧!1.下载最新内核源码包,解压至主目录下接下来的步骤当然可以在

2012-08-27 09:05:38 405

转载 线程那些事儿

在多线程程序中,一个新的线程通常由一个进程调用phtread_create()函数而诞生的。新线程创建后,通常将这个进程称为主线程。你也许会有所迷惑:一个进程怎么会编程线程?此刻有几个线程,几个进程?其实通过上文对线程、轻量级进程以及线程组之间关系的理解后,这个问题似乎也不难回答。我们可以将所有的进程都看作一个线程组,只不过普通进程的线程组只包含它自己一个线程,它不能与其他线程共享资源,只能独

2012-08-27 08:54:44 411

转载 进程在Linux内核中的角色扮演

在Linux内核中,内核将进程、线程和内核线程一视同仁,即内核使用唯一的数据结构task_struct来分别表示他们;内核使用相同的调度算法对这三者进行调度;并且内核也使用同一个函数do_fork()来分别创建这三种执行线程(thread of execution)。执行线程通常是指任何正在执行的代码实例,比如一个内核线程,一个中断处理程序或一个进入内核的进程。这样处理无疑是简洁方便的,并且内

2012-08-27 08:52:51 710 1

转载 线程

1.线程通过操作系统原理课,我们知道进程是系统资源分配的基本单位,线程是程序独立运行的基本单位。线程有时候也被称作小型进程,首先,这是因为多个线程之间是可以共享资源的;其次,多个线程之间的切换所花费的代价远远比进程低。在用户态下,使用最广泛的线程操作接口即为POSIX线程接口,即pthread。通过这组接口可以进行线程的创建以及多线程之间的并发控制等。2.轻量级进程如果内核要对线程

2012-08-27 08:35:50 281

原创 https://training.linuxfoundation.org/

https://training.linuxfoundation.org/

2012-08-24 18:20:58 576

转载 嵌入式技术网站

嵌入式开发不可避免的要涉及到一些电子技术,收集了一些常见的电子行业技术网站。资料(PDF芯片)查询类网站:IC/PDF查询 http://www.21icsearch.com电子元器件查询 http://www.chinadz.com/IC/PDF查询 http://www.ic37.com/器件手册 http://www.datasheet5.com/光电行业ofwe

2012-08-23 14:46:59 480

原创 logcat 源码

find ./ -name logcat./system/core/logcat./sdk/ddms/libs/ddmuilib/tests/src/com/android/ddmuilib/logcat./sdk/ddms/libs/ddmuilib/src/com/android/ddmuilib/logcat

2012-08-23 14:45:05 446

原创 mount -o remount,rw /dev/block/mmcblk0p6 /system/

mount -o remount,rw /dev/block/mmcblk0p6 /system/mke2fs -t ext4 -T huge -O resize_inode -E stride=256,stripe-width=2048 /dev/sde1dumpe2fsresize2fs -p /dev/sde1 18000G

2012-08-23 14:42:19 3289

转载 Andoird Overview

分析:第一层:Linux操作系统和驱动(Linux kernel):由C语言实现。Android核心系统服务依赖于Linux2.6内核,包括:安全性、内存管理、进程管理、网络协议、驱动模型。Linux内核也作为硬件和软件栈之间的抽象层。除了标准的Linux内核外,Android还增加了内核的驱动程序:Binder(IPC)驱动、显示驱动、输入设备驱动、音频系统驱动、摄像头驱动、Wi

2012-08-23 10:24:22 700

转载 【详解】回车 换行 0x0D 0x0A CR LF \r \n的来龙去脉

【回车和换行的历史】在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行,需要回车换行,此过程,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打

2012-08-20 14:25:21 1910

转载 内核入门

针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制; (参考资料来源:飞凌 http://www.witech.com.cn/)一.核心源程序的文件组织:  1.Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(例如2.0.30)都是一个稳定地

2012-08-19 15:43:36 381

转载 嵌入式开发需要具备的

1、Linux 基础  安装Linux操作系统 Linux文件系统 Linux常用命令 Linux启动过程详解 熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令 认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量 定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑

2012-08-19 15:35:18 1331

原创 单端信号与差分信号

单端信号:一般有较大的电平逻辑摆幅>1.5V用逻辑门限来衡量数据   如一个范围来表示0、1差分信号:现代设计使用小电平逻辑摆幅多数使用差模信号零点衡量数据; 如何表示1和0: 根据两根线的大小:eg  A>B 为1,A

2012-08-18 22:16:10 2548

原创 libc 库

glibc库是gun发布的libc库。glibc是linux系统中最底层的API。

2012-08-18 22:11:40 468

原创 PCI device(二)

include/linux/pci.h/* * The pci_dev structure is used to describe PCI devices. */struct pci_dev {        struct list_head bus_list;      /* node in per-bus list */        struct pci_bus

2012-08-16 15:27:28 1443

原创 PCI device about MMC/SD host controller

include/linux/mod_devicetable.h#ifdef __KERNEL__#include typedef unsigned long kernel_ulong_t;#endif#define PCI_ANY_ID (~0)struct pci_device_id {        __u32 vendor, device;           /

2012-08-16 13:32:47 1541

转载 C 关键字extern、static

C语言中:extern :extern(外部引用)可以置于变量或者函数前,以标示变量或函数的定义在别的文件中,在一个文件中用到的extern这些变量或函数是外来的,不是本文件定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。注意,只有其他文件中的全局变量才能被其他文件所extern。extern int val;注:      此处的函数类型可以省略,即extern

2012-08-15 17:19:37 709

转载 C关键字sizeof

一、sizeof的概念    sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。    它并不是函数。    sizeof操作符以字节形式给出了其操作数的存储大小。    操作数可以是一个表达式或括在括号内的类型名。    操作数的存储大小由操作数的类型决定。    二、sizeof的使用方法    1、用于数据类型

2012-08-15 17:18:35 1517

原创 Linux下进程间通信

Linux下进程间通信主要手段1.pipe、named pipe   管道用于具有亲缘关系的进程间通信。有名管道突破了这种限制,还允许无亲缘关系的进程间通信。2. 信号  类似于中断,是一种异步通信模式。Linux的信号不可靠问题主要指的是信号可能丢失。内核源码kernal/signal.c信号值位于SIGRTMIN和SIGRTMAX之间的信号都是可靠信号,可靠信号克服了信号可能丢

2012-08-14 17:25:12 905

转载 C中的可变参数研究

C中的可变参数研究 一.   何谓可变参数 int   printf(   const   char*   format,   ...);   这是使用过C语言的人所再熟悉不过的printf函数原型,它的参数中就有固定参数format和可变参数(用”…”表示).   而我们又可以用各种方式来调用printf,如:printf( "%d ",value);   printf( "

2012-08-14 16:45:27 420

转载 gcc -I -L -l区别

gcc -I -L -l区别我们用gcc编译程序时,可能会用到“-I”(大写i),“-L”(大写l),“-l”(小写l)等参数,下面做个记录:例:gcc -o hello hello.c -I /home/hello/include -L /home/hello/lib -lworld上面这句表示在编译hello.c时

2012-08-14 10:19:24 424

转载 gcc 编译时带lpthread

链接多线程的库. 在程序中用到了pthread.h头文件中的函数时需要加这个选项.编译时加与不加-lpthread,在执行时究竟有哪些具体区别呢?区别在于 ELF解析器,而不是内核。 内核execve返回到用户空间时,执行的是interpreter;如果有链接到libpthread库,interpreter程序会先加载这个库,然后再回到a.out去执行

2012-08-14 10:12:38 1814

转载 很不错的资源网站

http://search.csdn.net/CSDN搜索,CSDN还是有非常多的编程资源的,用它的搜索能搜出不少东西。代码类别也比较全面。http://snippets.org/简单实用的代码收集网站,强力推荐。比如你要找个DES加密,要找个数据压缩,找个INI文件操作的C代码等,均能手到擒来。http://www.codase.com/index.html它是一个代码搜索引

2012-08-10 18:00:01 624

转载 类型转换

有一个char*型指针碰巧指向一些int型变量,我想跳他们,为什么((int *p)++)这样的代码不行?在C语言中,类型转换操作符并不意味着“把这些二进制位看作另一种 类型,并作相应的处理“。转换后的值是一个右值。p = (char *) ((int *)p + 1);或者:p += size(int);怎样在整形和指针之间进行转换?强制将指针转换为整数

2012-08-10 16:42:55 220

转载 指针

*p++ 是自增P 还是自增P指向的对象++,- - 优先级比一元运算符高,因此*p++等价于*(p++)。他自增P,返回P之前的值。C语言指针运算:C语言中的指针运算总是自动地采纳它所指向的对象的大小。

2012-08-10 14:23:33 238

原创 Glibc

glibc是gnu发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。http://www.gnu.org/software/libc/

2012-08-10 12:59:19 273

转载 /proc/sys/vm/

1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作。缺省设置:0,禁用Block Debug模式2) /proc/sys/vm/dirty_background_ratio该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。缺省设置:10

2012-08-09 17:11:49 366

转载 解决死锁的方法

解决死锁的方法:1. 认真审查代码,看看lock与unlock是否配对,特别要看看return之前是否忘记了unlock了2. 可以通过在上锁前、上锁后以及解锁后进行打印或者写日志文件(推荐),来查找死锁的位置。这个时候,计数器是个很好的选择。3. 看看是否滥用了Linux系统的信号,信号也可能导致死锁。

2012-08-09 16:33:29 303

原创 编译内核

构建部分内核:make drivers/usb/serial                    不会链接成module的最终映像make M=driver/usb/serial                  链接成module最终映像make driver/usb/serial/visor.ko        构建一个特定文件make  O=path  编译输出定向到另一个

2012-08-06 17:50:25 204

原创 ioctl

block/ioctl.c function:blkdev_ioctl()

2012-08-06 14:07:35 259

转载 Debugging the kernel using Ftrace---http://lwn.net/Articles/365835/

1. Setting up FtraceFor the purpose of debugging, the kernel configuration parameters that should be enabled are:    CONFIG_FUNCTION_TRACER    CONFIG_FUNCTION_GRAPH_TRACER    CONFIG_STACK_TRAC

2012-08-03 09:49:24 367

原创 如何在userspace enable gcov

1. Add gcc parmater "-fprofile-arcs and -ftest-coverage flags" and compile the program.2. Run the  programer, will generate gcno data.3. Use the command gcc *.c can see the coverage total data.

2012-08-02 16:34:02 453

原创 cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

2012-08-02 12:42:47 5109

转载 Debugging the kernel using Ftrace

Ftrace is a tracing utility built directly into the Linux kernel. Many distributions already have various configurations of Ftrace enabled in their most recent releases. One of the benefits that Ftrac

2012-08-02 09:57:10 489

原创 object_is_on_stack() 函数

内核有这样的用法, 应该是检查一块内存是否在栈上,如果是 就重新分配内存,不是的话 就可以重用吧。 be32_to_cpu()

2012-08-02 09:33:22 494

空空如也

空空如也

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

TA关注的人

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