
linux
文章平均质量分 50
小饼仙子
这个作者很懒,什么都没留下…
展开
-
2021-03-18 嵌入式ARM芯片JLink调试环境搭建
硬件连线安装正常后1.安装arm在linux下的编译器2.安装linux环境下JLink软件3.启动JLinkGDBServer ,参数:-device Cortex-M3 -if SWD -speed 200,显示等待连接4.修改代码makefile中的GDB server IP为127.0.015.执行make debug...原创 2021-03-18 15:21:18 · 629 阅读 · 0 评论 -
linux虚拟机与windows之间文件互访的几种实现方法
1.samba最常用的方法,通过在linux中架设samba服务器,实现windows与linux之间文件互访。 2.ftp古老的方式,linux下建立ftp服务器。 3.vm tools通过在linux下安装vm tools,直接实现windows与linux之间文件互相拖拽。问题是单独文件ok。文件夹拖拽,复制失败。why?原创 2013-10-28 14:26:28 · 2005 阅读 · 0 评论 -
Linux驱动里的wmb函数
#include "void rmb(void);" "void wmb(void);" "void mb(void);" 这些函数在已编译的指令流中插入硬件内存屏障;具体的插入方法是平台相关的。rmb (读内存屏障)保证了屏障之前的读操作一定会在后来的读操作执行之前完成。wmb 保 证写操作不会乱序,mb 指令保证了两者都不会。这些函数都是 barrier 函数的超转载 2013-11-18 09:19:23 · 6775 阅读 · 0 评论 -
驱动程序设计开发基本概念和原则
LINUX设备驱动程序(第3版) 第一章介绍了驱动开发和设计的基本概念与原则。主要内容为: 1.驱动程序旨在提供机制而非策略。策略是上层应用软件提供的。驱动程序提供机制意味着提供硬件可以实现的功能。所以,编写访问硬件的内核代码时不要给用户强加任何特定的策略。 2.驱动程序开发的特征在于:异步操作和同步操作都支持,允许被多次打开,充分利用硬件特性,不具备用来简化任务或提供共与策略相关原创 2013-11-04 11:21:45 · 1275 阅读 · 0 评论 -
模块构造的编译和装载
模块名称:module.komakefile1:makefile2:原创 2013-11-04 17:55:47 · 592 阅读 · 0 评论 -
linux网络设备驱动的结构
第十六章linux 网络设备驱动的结构 中描述了对应linux 网络设备的驱动结构。其中,net_device 是设备驱动功能层中的各种函数的容器。向上提供统一的用于描述网络设备属性和操作的结构体原创 2013-11-04 10:55:26 · 1214 阅读 · 0 评论 -
linux 2.6&3.0 内核构造
linux 内核 是针对特定的cpu运行的内核程序。不同的处理器架构意味着不同的指令集。因此,在构造内核时,必须获取针对指定处理器架构的内核版本。不存在一个内核同时兼容多种处理器架构的情况。另外,LINUX设备驱动程序(第3版) 第二章提到linux 2.6内核构造模块时,除了从kernel.org获取“主线”内核并安装到自己的系统中,还必须在自己的系统中配置和构建好自己的“内核树”。所谓内核原创 2013-11-04 11:09:53 · 1005 阅读 · 0 评论 -
内核空间&用户空间
模块运行在内核空间,应用程序运行在用户空间 在UNIX下,内核运行在最高级别,CPU允许其进行任何操作;应用程序运行在用户空间,级别比较低,cpu控制其对硬件的直接访问以及对内存的非授权访问。 用户空间与内核空间拥有各自的内存映射,即地址空间。 模块是内核功能的延伸,运行在内核空间。驱动完成功能:1,作为系统调用的一部分被执行;2,其他函数负责中断处理。原创 2013-11-04 16:19:13 · 593 阅读 · 0 评论 -
Linux内核bridge浅析
Linux网桥模型: Linux内核通过一个虚拟的网桥设备来实现桥接的,这个设备可以绑定若干个以太网接口设备,从而将它们桥接起来。如下图所示: 网桥设备br0绑定了eth0和eth1。对于网络协议栈的上层来说,只看得到br0,因为桥接是在数据链路层实现的,上层不需要关心桥接的细节。于是协议栈上层需要发送的报文被送到br0,网桥设备的处理代码再来判断报文该被转发到eth0转载 2013-11-25 09:35:09 · 986 阅读 · 0 评论 -
spin_lock_irqsave和spin_lock
驱动开发中为了进行竞态保护,对于全局变量的访问提供自旋锁功能。在中断处理中,使用时,对于自旋锁采用spin_lock_irqsave 进行加锁(1.保存中断状态,关闭本地终端,获取锁)。访问结束通过 spin_unlock_irqrestore进行释放。如果本地中断已经开启,那么不需要保存中断状态,可调用spin_lock_irq 和 spin_unlock_irq进行保护原创 2013-11-11 13:43:00 · 966 阅读 · 0 评论 -
驱动开发中的常用方法
1.修改寄存器中的数值:a,先读取当前寄存器中数值;b,将当前寄存器中的数值设置为(当前寄存器中的数值 | 需要修改的mask)c,读取寄存器修改之后的最新数值;2,定义寄存器地址因为设备众多,因此驱动程序定义地址时往往采用地址分段划分,利用偏移量逐一分层定义每个地址。原创 2013-11-13 14:05:24 · 649 阅读 · 0 评论 -
中断及共享中断概述
大多数CPU核心有两种中断输入:一种提供给常规中断的;另一种提供给非屏蔽性中断(nonmaskable interrupts,NMIs)的。标准外围设备使用常规中断输入;而NMIs被用来应付危险的中断,这些中断不能被忽略或禁止,如:Watchdog 的超时设定。在多数设计中,NMI并没有被使用。对于大多数系统来说,仅有一个常规中断是不足以应付那么多的中断资源,比如:计数器、DM转载 2013-11-13 17:45:55 · 1807 阅读 · 0 评论 -
第七章时间,延迟和延缓操作
内核通过定时器中断来跟踪时间变化。时钟中断的间隔为HZ。unsigend long jiffies (只读)记录了自最近一次系统启动之后的时钟滴答数。大约五十天左右会出现一次溢出,需要在使用时进行处理。jiffies 表示未来N秒后的时间: jiffies + N × HZ 转换为毫秒值:( jiffies + N * HZ ) * 1000时间戳计数器:TSC 随时钟周期不断原创 2013-11-13 14:59:20 · 879 阅读 · 0 评论 -
嵌入式系统数据库选型以及sqlite数据库使用
学习网络安全技术与应用杂志中一篇文章《基于arm-linux 的sqlite 嵌入式数据库技术》后的笔记。1.嵌入式系统数据库选型原则:a。适当的体积。b。较强的功能。需要满足多种应用。c。开源的代码。降低开发成本,完善产品维护,为产品稳定运行被以彻底解决手段。2.sqlite支持大多数sql92:多表,索引,视图,事务,触发,驱动,用户接口。有效高速可原创 2013-11-27 16:19:55 · 1349 阅读 · 0 评论 -
linux下DMA API
通用设备的动态DMA映射by JHJ(jianghuijun211@gmail.com) 本文描述DMA API。更详细的介绍请参看Documentation/DMA-API-HOWTO.txt。API分为两部分,第一部分描述API,第二部分描述可以支持非一致性内存机器的扩展API。你应该使用第一部分所描述的API,除非你知道你的驱动必须要支持非一致性平台。第一部分 D转载 2013-11-15 13:51:20 · 1119 阅读 · 0 评论 -
分析skb和网卡驱动的关系
网卡驱动所能看到的仅仅是MAC帧,MAC帧独立于任何上层协议,仅仅属于数据链路层。以太网为例,DM9000作为设备。*******************************************************************1.发送的skb是什么样?(内核决定)发送的MAC帧格式: P转载 2013-12-06 10:07:20 · 1593 阅读 · 0 评论 -
linux代码心得---bridge部分
(1) bridge ioctlint br_dev_ioctl(struct net_device *dev, struct ifreq *rq, int cmd){ struct net_bridge *br = netdev_priv(dev); switch(cmd) { case SIOCDEVPRIVATE:转载 2013-12-06 17:22:46 · 2400 阅读 · 0 评论 -
在WIN7下虚拟机中安装配置linux调试环境全攻略
1.win7下安装虚拟机vmware workstation2.在虚拟机中安装linux,采用suse 103.在linux中安装gcc4.在linux中安装wine(从官网下载源代码,编译,安装。方法参见官网)5.安装source insight(看代码),ssh(代码下载)6.进入vm的菜单 编辑-》虚拟网络编辑器,选择vmnet8,设置对应dhcp服务启动,并设置ip网段原创 2013-12-12 18:24:32 · 1111 阅读 · 0 评论 -
linux网络报文接收发送浅析
对于linux内核来说,网络报文由网络设备来进行接收。设备驱动程序从网络设备中读取报文,通过内核提供的网络接口函数,将报文传递到内核中的网络协议栈。报文经过协议栈的处理,或转发、或丢弃、或被传送给某个进程。网络报文的发送与之相反,进程通过系统调用将数据送入网络协议栈,或者由网络协议栈自己发起报文的发送,然后协议栈通过调用网络接口函数来调度驱动程序,使其将报文传送给网络设备,从而发送出去。本转载 2013-12-06 09:40:54 · 806 阅读 · 0 评论 -
Linux内核中的hash和bucket
哈希表(Hashtable)又称为“散置”,Hashtable是会根据索引键的哈希程序代码组织成的索引键(Key)和值(Value)配对的集合。Hashtable 对象是由包含集合中元素的哈希桶(Bucket)所组成的。而Bucket是Hashtable内元素的虚拟子群组,可以让大部分集合中的搜寻和获取工作更容易、更快速。 哈希函数(Hash Function)为根据索引键来返回数值哈希程转载 2013-12-06 16:52:40 · 812 阅读 · 0 评论 -
献给乐于钻研Linux技术的朋友---Bridge-Howto
本文适用对象:拥有一定的网络基础、Linux基础、略懂英文、热爱钻研的linux爱好者本文适用软件版本:Redhat系的Linux发行版,包括RedHat,FeraCore,Mandrake等,包中的脚本只在RedHat9和Mandrake10.1下测试通过,欢迎你来测试别的版本本文作者及版权:Copyleft under Free Documentation License (FDL) by转载 2013-12-13 10:53:15 · 1081 阅读 · 0 评论 -
阐述SUSE 10.1交叉编译环境构建方法
现在很多的人都在应用SUSE,伴随着的问题也随之出现,我学习SUSE也有很长时间了,也有些小的心得体会。在这里和大家分享一下,今天所要说的是SUSE 10.1交叉编译环境构建问题。crosstool制作工具的链的方法很好,但是很浪费时间,因为编译一次要数个小时,很是麻烦,也不适合初学者,下面介绍另一种SUSE 10.1交叉编译环境构建方法。1.复制arm-linux-gcc-3.4.1.t转载 2013-12-13 14:53:17 · 872 阅读 · 0 评论 -
linux下svn使用指南
1.1 服务器端配置说明1.1.3 配置用户和权限1.1.4 导入工程到仓库中1.2 客户端操作指南及使用规范1.2.1 检出工作拷贝1.2.2 svn update 更新别人做的更改1.2.2.1 svn update 获取最新版本1.2.2.2 svn update-r 获取特定的版本1.2.3 svn st 查看文件状态信息1.2.4 svn lo转载 2013-12-13 15:14:29 · 653 阅读 · 0 评论 -
linux 系统启动过程
《深入理解linux 内核第三版 附录一》学习笔记。原创 2013-12-16 08:55:59 · 555 阅读 · 0 评论 -
conflicting types for 'dev_t'的原因
在Linux下编译程序有时会遇到这种问题,这貌似是一个Linux历史遗留问题:/usr/include/sys/types.h:62: error: conflicting types for ‘dev_t’/usr/include/linux/types.h:13: error: previous declaration of ‘dev_t’ was here/usr/i转载 2013-12-18 17:47:03 · 2542 阅读 · 1 评论 -
嵌入式linux应用程序移植方法总结
前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟。江浩写的《CAPWAP移植进展.docx》对openCapwap的移植过程有了比较详细的描述,所以在此就不涉及技术细节了,本文档主要以openCapwap的移植为例,总结嵌入式linux应用程序移植的一般方法和步骤,为以后可能需要的移植工作提转载 2013-12-19 09:14:57 · 2138 阅读 · 2 评论 -
构建U盘启动的嵌入式linux
1 构建U盘启动的嵌入式linux(一)前言:在参考了>一书和独孤九贱的>后,他们都是用CF卡来制作,对于大多数人估计和我一样,手上并没有板子和CF卡,而只有x86的电脑和USB盘,这里详细的描述一下我是如何制作的U盘启动,过程虽然破费很多时间,还是可以享受一下成功的喜悦,重要的是我们学习如何的编译kernel,如何建立自己的根文件系统,以及内核的引导启动过程,虽然这个还有许多不完善的地方,我们在转载 2013-12-24 09:39:56 · 1319 阅读 · 0 评论 -
makefile中的自动化变量$@,$%,$
自动化变量 模式规则中,规则的目标和依赖文件名代表了一类文件名;规则的命令是对所有这一类文件重建过程的描述,显然,在命令中不能出现具体的文件名,否则模式规则失去意义。那么在模式规则的命令行中该如何表示文件,将是本小节的讨论的重点。 假如你需要书写一个将.c 文件编译到.o 文件的模式规则,那么你该如何为gcc 书写正确的源文件名?当然了,不能使用任何具体的文件名,因为在每一次执行模转载 2013-12-23 16:45:59 · 898 阅读 · 0 评论 -
VM下linux虚拟机扩容,分区
一 windows的VM扩展磁盘空间1) VMWorkstation 6.5 及前的版本使用如下命令vmware-vdiskmanager -x 40GB myDisk.vmdk 2) VMworkstation 7及以后的版本可以使用方法1),也可以直接在UI中操作,如下,使用Virtual machine settings中的hard转载 2013-12-24 17:14:49 · 1477 阅读 · 0 评论 -
[转] GCC 中的编译器堆栈保护技术
以堆栈溢出为代表的缓冲区溢出已成为最为普遍的安全漏洞。由此引发的安全问题比比皆是。早在 1988 年,美国康奈尔大学的计算机科学系研究生莫里斯 (Morris) 利用 UNIX fingered 程序的溢出漏洞,写了一段恶意程序并传播到其他机器上,结果造成 6000 台 Internet 上的服务器瘫痪,占当时总数的 10%。各种操作系统上出现的溢出漏洞也数不胜数。为了尽可能避免缓冲区溢出漏洞被攻转载 2013-12-25 17:54:23 · 883 阅读 · 0 评论 -
Redboot
Redboot (Red Hat Embedded Debug and Bootstrap)是Red Hat公司开发的一个独立运行在嵌入式系统上的BootLoader程序,是目前比较流行的一个功能、可移植性好的BootLoader。Redboot是一个采用eCos开发环境开发的应用程序,并采用了eCos的硬件抽象层作为基础,但它完全可以摆脱eCos环境运行,可以用来引导任何其他的嵌入式操作系统,如转载 2014-01-16 10:11:41 · 1226 阅读 · 0 评论 -
嵌入式arm linux环境中gdb+gdbserver调试
一.前言嵌入式Linux系统中,应用开发过程中,很多情况下,用户需要对一个应用程序进行反复调试,特别是复杂的程序。采用GDB方法调试,由于嵌入式系统资源有限性,一般不能直接在目标系统上进行调试,通常采用gdb+gdbserver的方式进行调试。 Gdbserver在目标系统中运行,gdb则在宿主机上运行。目标系统必须包括gdbserver程序,宿主机也必须安装gdb程序。在此我们还不能直接采用li转载 2014-01-17 08:34:10 · 954 阅读 · 0 评论 -
iptable笔记
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://kuangkuang.blog.51cto.com/838/247230 一、netfilter/iptable的理解 这个当初我理解不了,主要是没把netfilter理解清楚。 Netfilter是集成在内核中的,用来定义存储各转载 2014-01-27 13:51:57 · 2247 阅读 · 0 评论 -
谈谈dpdk应用层包处理程序的多进程和多线程模型选择时的若干考虑
看到知乎上有个关于linux多进程、多线程的讨论:http://www.zhihu.com/question/19903801/answer/14842584自己项目里也对这个问题有过很多探讨和测试,所以正好开贴整理一下,题目有点长,其实就2点:1. 多进程模型和多线程模型,这两种模型在linux上有什么区别,各有何优缺点? 这里仅限于linux平台,因为linux平台跟转载 2014-02-24 15:27:00 · 1677 阅读 · 0 评论 -
修改vmware的网卡类型
2008-12-19 23:29:45标签:职场 网卡 vmware 休闲原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://h2appy.blog.51cto.com/609721/121274参见VMware Guest Operating System Installation Guide中的内容可知:转载 2014-02-28 13:35:41 · 6250 阅读 · 0 评论 -
apache两种工作模式详解
[url=http://www.sudu.cn/web/host.php][/url]刚接触这两个配置时很迷糊,全部开启或全部注释没有几多变化。今天搜索到这么一篇讲得还不错的文章,看了几篇,还是不能完全记住,做一个收藏。空闲子进程:是指没有正在处理请求的子进程。1、prefork.c模块(一个非线程型的、预派生的MPM) prefork MPM 使用多个子进程,每个子进程只有转载 2014-03-03 13:43:03 · 796 阅读 · 0 评论 -
几种开源的TCP/IP协议栈分析
1、BSD TCP/IP协议栈,BSD栈历史上是其他商业栈的起点,大多数专业TCP/IP栈(VxWorks内嵌的TCP/IP栈)是BSD栈派生的。这是因为 BSD栈在BSD许可协议下提供了这些专业栈的雏形,BSD许用证允许BSD栈以修改或未修改的形式结合这些专业栈的代码而无须向创建者付版税。同时, BSD也是许多TCP/IP协议中的创新(如广域网中饿拥塞控制和避免)的开始点。ftp://ftp转载 2014-03-04 10:29:33 · 1203 阅读 · 0 评论 -
linux内核SMP负载均衡浅析
需求在《linux进程调度浅析》一文中提到,在SMP(对称多处理器)环境下,每个CPU对应一个run_queue(可执行队列)。如果一个进程处于TASK_RUNNING状态(可执行状态),则它会被加入到其中一个run_queue(且同一时刻仅会被加入到一个run_queue),以便让调度程序安排它在这个run_queue对应的CPU上面运行。一个CPU对应一个run_queue这样的设计,转载 2014-03-04 10:55:54 · 672 阅读 · 0 评论 -
linux进程调度浅析
操作系统要实现多进程,进程调度必不可少。有人说,进程调度是操作系统中最为重要的一个部分。我觉得这种说法说得太绝对了一点,就像很多人动辄就说"某某函数比某某函数效率高XX倍"一样,脱离了实际环境,这些结论是比较片面的。 而进程调度究竟有多重要呢? 首先,我们需要明确一点:进程调度是对TASK_RUNNING状态的进程进行调度(参见《linux进程状态浅析》)。如果进程不可执行(正在睡转载 2014-03-04 13:59:48 · 960 阅读 · 0 评论 -
uIP协议栈分析
uIP特性uIP协议栈往掉了完整的TCP/IP中不常用的功能,简化了通讯流程,但保存了网络通讯必须使用的协议,设计重点放在了IP/TCP/ICMP/UDP/ARP这些网络层和传输层协议上,保证了其代码的通用性和结构的稳定性。由于uIP协议栈专门为嵌进式系统而设计,因此还具有如下优越功能:(1) 代码非常少,其协议栈代码不到6K,很方便阅读和移植。(2)转载 2014-03-04 14:40:21 · 1399 阅读 · 0 评论