- 博客(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
原创 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
转载 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关注的人