软件开发,安全加密
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
前几天大致分析了u-boot针对smdk2410的源码,了解了启动的流程,但是对板上许多硬件的驱动过程还不太清楚。smdk2410源码中有针对Nor Flash的初始化和读取,但源码中没有对Nand Flash的操作,虽然针对其他型号的板子应该有Nand的源码,但方便起见,我查阅了vivi的源码,它支持从Nand Flash启动,自然有我需要的东西。
掌握 Linux 调试技术在 Linux 上找出并解决程序错误的主要方法 Steve Best (sbest@us.ibm.com)JFS 核心小组成员,IBM 简介: 您可以用各种方法来监控运行着的用户空间程序:可以为其运行调试器并单步调试该程序,添加打印语 句,或者添加工具来分析程序。
在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设备号次设备号等等,只需要实现一个file_operations,然后通过debugfs_create_file就可以在debugfs中建立一个文件结点,就像字符设备驱动那样,只需要对这个文件结点进行open就可以进行read、write、ioctl,等等操作,这些操作对应到我们在驱动里为debugfs准备的file_operations。
应该说,uboot的Makefile还是比较简单的,虽然看起来很庞大,但是后面的大部分都是各类型board的config,真正生成u-boot.bin的部分较少。uboot的代码也是如此,代码很多,如果单一的看某个board,代码则不多。
在我的博客中的《如何从应用程序进入linux内核》日志中我详细分析了Unix的socket的创建、发送、接收、关闭的过程,而你看到下边这些文章是基于IPV4的追踪分析的过程。从围绕着服务器端的socket的建立--监听--接收连接--客户端发送连接请求--与服务器对接--数据接收--数据发送整个过程为主线分析。
Linux下的段错误产生的原因及调试方法 简而言之,产生段错误就是访问了错误的内存段,一般是你没有权限,或者根本就不存在对应的物理内存,尤其常见的是访问0地址.
linux内核编译流程-基于2.6.26内核 原文地址:http://hi.baidu.com/yuhuntero/blog/item/941042edf3990d4a79f0558a.
文件: smdk2410_align.rar 大小: 538KB 下载: 下载 非常不错的 u-boot ppt 当我们porting u-boot ok 后, 再回过头来复习 u-boot 的时候, 发现它讲的很清楚, 很不错。
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。
一、基本介绍 tcpdump工具鼎鼎大名,无人不知。tcpdump是网络数据分析中最重要的工具之一,摘一段百度百科对它的介绍(http://baike.baidu.com/view/76504.htm)。
------------------------------------------ 本文系本站原创,欢迎转载! 转载请注明出处:http://ericxiao.cublog.cn/ ------------------------------------------ 一:前言 Tty这个名称源于电传打字节的简称。
Linux设备模型之tty驱动架构分析 (转载) 转自:http://ericxiao.cublog.cn/ 一:前言TTY这个名称源于电传打字节的简称,在Linux系统表示各种终端。
也许你很少面临这一情况,但是一旦如此,你一定知道出什么错了:可用内存不足或者说内存用尽(OOM)。结果非常典型:你不能再分配内存,内核会杀掉一个任务(一般是正在运行那个)。
这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助1.源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。
Linux的计时系统(Timekeeping)在ULK中有专门一章来讲,但ULK第三版是基于2.6.10的,TimeKeeping部分已经有了很大的变化,如NOHZ mode和hrtimer,在ULK中都没有涉及,本文希望能对现在的kernel的Timekeeping部分做较完整的讲述。
1. 引言 从事Linux环境工作2年有余,一直懵懵懂懂,1年前拜读了《莱昂氏UNIX源代码分析》一书,感觉自己的学习道路漫漫且修远。最近受chinaunix的精华文帖启发,拟将近来的部分内核调用分析笔记拿出来与各前辈先进共同探讨学习,以壮个人学习之路。
为什么要使用服务应该程序呢?服务程序就像系统的一些服务一样,能够自动地启动,并执行相应的操作;而且因为服务程序的在层次上和一般的应用程序不同,其能够在系统启动时就自动地运行,而不像一般的应用程序那样一定要在登陆后才能运行,这些就是服务的一些好处了,如果你也想你的程序具有这样的功能,那么你就可以建立一个服务应用程序了。
在安装完VC6和WDK以后,就开始进行环境的配置了,可结果是弄了半个上午,还是搞不定。去网上找信息,关于WDK的,多是使用VS2005或VS2008的,有的要借助于DriverStudio之类的,按上面的方法来配置自己的工程看来不行。
1. QObject QObject类是所有能够处理signal、slot和事件的Qt对象的基类,原形如下: QObject::QObject ( QObject * parent =0,const char * name = 0 ) 创建带有父对象及其名字的对象,对象的父对象可以看作为这个对象的所有者。
在Qt中,有一种用于对象之间的通信:信号-槽机制,这种机制是Qt的核心机制,也是它区别于其他GUI工具的最主要的特征。信号-槽机制可以携带任意类型、任意数量的参数,而且完全是安全的,不会引起系统的崩溃。
内核中的UDP socket流程(1) 作者:gfree.wind@gmail.com 原文:http://blog.chinaunix.net/u3/116859/showart.php?id=2443229 相对于TCP,UDP协议要简单的多。
点对点形式,大家应该都知道。那么支持这个形式的协议就是PPP协议。那么这个协议的一些作用和功能大家是否清楚呢?这里我们就针对PPP协议来进行一下详述。想必大家在阅读之后,对这个协议能够有一个新的认识。
在Linux内核的源码中提供了USB设备驱动的框架代码:usb-skeleton.c我们自己的驱动程序可借助这个框架代码,做些修改就能生成我们自己的驱动程序。 首先从USB设备与Linux驱动的匹配说起,当一个USB设备连接到Linux USB总线之后,USB主机控制器会使用USB设备的0号端点EPO对USB查询及设置,用以获取USB设备中提供的相关信息,然后根据这些信息,来决定加载那些驱动程序等。
虚拟内存地址与实际内存地址之间的关系,是如此转换的,逻辑地址-->线性地址-->物理地址。也是从分段单元到分页单元的转换。在 linux中,用户程序所使用的地址与硬件使用的物理地址是不等同的。
在《深入Linux设备驱动程序内核机制》第11章"块设备驱动程序” 11.2节当中给出了ramdisk的两个版本的实现,这个示例的目的除了让读者直观感受一下编写一个块设备驱动程序的大体框架和关键元素之外,还特别提到“这个例子还有一个非常重要的潜在用途,那就是通过ramdisk来研究Linux的文件系统,比如ext3等,因为mkfs.
disable_irq关闭中断并等待中断处理完后返回, 而disable_irq_nosync立即返回. 那么在中断处理程序中应该使用哪一个函数来关闭中断呢? 在中的按键驱动中, 使用disable_irq来关闭中断, 但是我在测试时进入中断后系统会死在中断处理程序, 而改为disable_irq_nosync则能正常退出中断处理程序.
本讲主要概述Linux设备驱动框架、驱动程序的配置文件及常用的加载驱动程序的方法;并且介绍Red Hat Linux安装程序是如何加载驱动的,通过了解这个过程, 我们可以自己将驱动程序放到引导盘中;安装完 系统后,使用kudzu自动配置硬件程序。
Linux网桥模型: Linux内核通过一个虚拟的网桥设备来实现桥接的,这个设备可以绑定若干个以太网接口设备,从而将它们桥接起来。如下图所示: 网桥设备br0绑定了eth0和eth1。
对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。
在linux系统中,其网卡驱动大多通过PCI总线与系统相连,同时,内核对于所有PCI总线上的设备是通过PCI子系统来进行管理,通过PCI子系统提供各种PCI设备驱动程序共同的所有通用功能。
0 引言随着人们对开放源代码软件热情的日益增高,Linux作为一个功能强大而稳定的开源操作系统,越来越受到成千上万的计算机专家和爱好者的青睐。在嵌入式领域,通过对Linux进行小型化裁剪后,使其能够固化在容量只有几十兆字节的存储器芯片或单片机中,成为应用于特定场合的嵌入式Linux系统。
sys_connect对于客户端来说,当创建了一个套接字后,就可以连接它了。 case SYS_CONNECT: err = sys_connect(a0, (struct sockaddr __user ...
Tcp栈的三次握手简述进一步的分析,都是以 tcp 协议为例,因为 udp要相对简单得多,分析完 tcp,udp的基本已经被覆盖了。 这里主要是分析 socket,但是因为它将与 tcp/udp传输层交互,所以不可避免地接触到这一层面的代码,这里只是摘取其主要流程的一些代码片段,以更好地分析accept的实现过程。
sys_listen对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog);backlog 表示新建连接请求时,最大的未处理的积压请求数。
当创建了一个Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码:strut sockaddr_in sin; sin.
原文:http://blog.csdn.net/yeyuangen/article/details/6799575 一、问题的引入——socket的引入是为了解决不同计算机间进程间通信的问题 1.socket与进程的关系 1).socket与进程间的关系:socket 用来让一个进程和其他的进程互通信息(IPC),而Socket接口是TCP/IP网络的API接口函数。
前面了解过 sk 有一个接收队列,用于存储接 收到的 skb,对于 socket 层面上来讲,数据接收,就是要把数据从这个队列中取出来,交给上层用户态。这里涉及到出队操作,但是,要了解如何出队,就 得了解传输层协议如何入队。
http://tech.chinaunix.net/a2010/1231/1145/000001145393.shtml
上次看了ubuntuer兄写的教你修改以及重构skb,受益匪浅,真是经典之作。但ubuntuer兄的代码是基于2.6.18的,比较旧。今天经过摸索,我终于让其可以在2.
TCP状态转换图 注:主动、被动 与 服务器、客户端没有明确的对应关系。 这个图N多人都知道,它排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻的认识,不能只停留在一知半解之中。
1. 前言打开一个网络socket后可以使用set/getsockopt(2)可实现用户空间与内核的通信,本质和ioctl差不多,区别在于set /getsockopt不用新建设备,直接利用系统已有的socket类型就可以进行,可用setsockopt函数向内核写数据,用 getsockopt向内核读数据。
我在学习《Linux设备驱动程序(第3版)》的 第九章 与硬件通信 时,对 I\O总线的概念 不是很清晰,所以查找了有关资料。现在总结如下: 本文的参考资料:1、 《AMBA、AHB、APB总线简介》 作者 adamzhao 日期 2006-11-16 19:33:00转载网址:http://www.
一. 在c中分为这几个存储区1.代码区- 存放程序的执行代码(机器指令) 2.栈区- 由编译器自动分配释放3.堆区 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收4.全局区(静态区)和常量区,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。
我们用术语慢系统调用(slow system call)描述accept函数,该术语也适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用有可能永远无法返回,多数网络支持函数都属于这一类。
Linux 系统中有大量的工具可用于 ELF 文件的二进制调试,常用的工具在 GNU binutils 包中可以找到,注意你可能需要这些工具的 x86 版本和 arm 版本,以便在调试环境中能够调试 x86 ELF 文件和 arm ELF 文件——与交叉编译器 arm-linux-gcc 类似,我们需要所谓的“交叉调试工具”,你可以通过互联网下载别人已经编译好的 crosstool ,或者自己重新编译( configure 时指 --target=arm-linux )。
select系统调用及驱动实现方法 一.系统提供select函数来实现多路复用输入/输出模型。原型: #include linux/poll.h>int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval *timeout); 参数maxfd是需要监视的最大的文件描述符值+1;rdset,wrset,exset分别对应于需要检测的可读文件描述符的集合,可写文件描述符的集 合及异常文件描述符的集合。
1 Union-Find(并查集):它借用树结构来处理集合的合并操作和查询操作 2 KMP 3 BFPRT 4 Quicksort 5 Floyd-Warshall algorithm:求得所有最短路径的方法 6 Gentry’s Fully ...