uboot网络调试方法 一、硬件简单确认:1、确认RGMII模式(hi3559A支持RGMII/RMII)2、phy的地址phy_addr3、PHY是否有延时电阻(RTL8211有)4、phy晶振时钟5、速率1000M clk 125M,100M clk 25M二、软件确认1、uboot涉及驱动:drivers/net/higmacv300,PHY配置驱动:drivers/net/phy/realtek...
PCI驱动框架简单分析 一、PCI 概念介绍 PCI是CPU和外围设备通信的高速传输总线。PCI规范能够实现32位并行数据传输,工作频率为 33MHz 或 66MHz ,最大吞吐率高达266MB/s,PCI的衍生物包括 CardBus、mini-PCI、PCI-Express、cPCI等。 PCI总线体系结构是一种层次式的体系结构。在这种层次体系结构中,PCI桥设备占据着重要的地位,它将父总线与子总线...
基于vxworks的PCI设备驱动编写 自研的PCI板卡写板卡驱动,板卡类型主要为串口卡,AD采集,DA输出,DIO等类型的常用板卡。硬件实现很简单,桥片PXI9054+FPGA结构。因为板卡功能主要为定制,不是商用,所以功能很简单,寄存器定义的很简单,驱动编写相对的很简单。 我使用的vxworks版本号为vxworks6.X, 考虑到兼容性(vxworks5.5),没有使用vxbus总线,另一方面,也没有使用vxbus的必...
VxWorks操作系统shell命令与调试方法总结 目录(?)[+]VxWorks下的调试手段主要介绍在Tornado集成开发环境下的调试方法,和利用支撑定位问题的步骤、思路。1 Tornado的调试工具嵌入式实时操作系统VxWorks和集成开发环境Tornado的组成结构如下图1。分为主机和目标机系统。图1 集成开发环境结构图在Tornado下,调试相关操作在Debug菜单下,包括:图2 Debug菜单简单解释各菜单项的功能1.1...
vxWorks shell命令 vxWorks命令规则:名词+动词,第二个单词开始大写 序号状态命令备注1BSPc改变配置2BSPp打印当前配置信息3BSP@开始加载内核4BSPctrl+x重新启动5BSP6BSP7vxWorksi查看进程8vxWorksifShow查看当前网络设置9vxWorksdevs查看所有的设备10vxWorkscd "/xxx/"进入目录11vxWorkscfIdeInit每次上电后执行12vxW...
七层网络协议 一、OSI七层网络协议OSI是Open System Interconnect的缩写,意为开放式系统互联。OSI参考模型各个层次的划分遵循下列原则:1)根据不同层次的抽象分层2)每层应当有一个定义明确的功能3)每层功能的选择应该有助于制定网络协议的国际标准。4)各层边界的选择应尽量节省跨过接口的通信量。5)层数应足够多,以避免不同的功能混杂在同一层中,但也不能太多,否则体系结构会过于庞大6)同一层...
CListBox快速清空 方法一:while(pmyListBox->GetCount()) pmyListBox->DeleteString( 0 ); 方法二:int nListCount=pMyListBox->GetCount(); for (int i=0;i < nListCount;i++) { pmyListBox->DeleteString(0);//循环次数等于总个
DLL中导出函数的两种方式(dllexport与.def文件) DLL中导出函数的声明有两种方式:一种方式是:在函数声明中加上__declspec(dllexport);另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链接器提供了有关被链接程序的导出、属性及其他方面的信息。方式一:在函数声明中加上__declspec(dllexport)/// 在动态链接库程序中/// 声明动态链接库(**.dll)的对
推挽输出与开漏输出的区别 转自 http://blog.chinaunix.net/uid-23065002-id-3885199.html推挽输出:可以输出高,低电平,连接数字器件;开漏输出:输出端相当于三极管的集电极. 要得到高电平状态需要上拉电阻才行. 适合于做电流型的驱动,其吸收电流的能力相对强(一般20ma以内).推挽结构一般是指两个三极管分别受两互补信号的控制,总是在一个三极管导通的
Edit自动换行 CEdit edit;CString str;str += "abc";str += "/r/n";str += "def"; edit.SetWindowText(str);控件中显示为:"abc def" 这是因为除了要用/r/n外,还要都CEdit 的属性进行设置:Auto HScroll 设置为 FalseMultiLine 设置为 True
MFC运行时窗口总是最小化,不直接弹出 1、这个问题是由于如下图步骤时勾选了“最小化“。解决办法如下第二张图,在InitDialog()函数中删除ShowWindow(MINSIZE).这样再运行时就会直接弹出了。
MFC让对话框窗口始终在最前&MFC弹出非模态对话框&居中 一、MFC让对话框窗口始终在最前方法一:在对话框的属性中,在more style中有一项是System model,选上它,即可!方法二:OnInitDialog里加入SetWindowPos(&wndTopMost,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);外部调用: m_dialog->SetWindowPos(&wndTopMost, 0, 0, 400,
Windows下C++ 串口编程实例 1. 本例子使用了比较规范的软件设计方法,类的设计具有比较好的可扩展性和移植性、代码的注释采用doxgen支持的javaDoc风格。2. 为了能方便初学者更快地了解和入门,几乎每一行代码都加上了详细的注释,对于注释中如果依然有不清楚的概念,相信你通过百度和google一定能找到答案。3. 本例子设计的串口操作类可以直接移植到其他的工程中去,大家也可以根据自己的需要添加其他的接口。4.
MFC文件操作大全 获得文件路径:GetFilePath()获得文件名:GetFileName()获得文件标题:GetFileTitile()Path is : "C:\WINDOWS\SYSTEM.INI"Name is : "SYSTEM.INI"Title is: "System"1.创建文件夹创建路径上最后的一个文件夹[cpp] view plain c
error C3872: “0x3000”: 此字符不允许在标识符中使用错误 的解决办法 主要是拷贝的程序问题,有错误的空字符0x3000是汉语的空格,也就是全角空格,相当于一个汉字,但你又看不见它。你知道的,像逗号,有半角(,)和全角(,)之分的,其实空格也有。0x3000是全角的空格,0x20是半角的空格。最好把这个语句的后面空白部分,都删除掉,免得有不可见的全角空格。
MFC中用CFile读取和写入文件 MFC提供了CFile类方便文件的读写,首先要知道,文件的数据读取、数据写入与文件指针的操作都是以字节为单位的,数据的读取和写入都是从文件指针的位置开始的,当打开一个文件的时候,文件指针总是在文件的开头。常规方法如下:CFile file;file.open( LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError
PCI总线地址空间与系统地址空间的关系 1、PCI地址空间PCI总线具有32位数据/地址复用总线,所以其存储地址空间为2的32次方=4GB。也就是PCI上的所有设备共同映射到这4GB上,每个PCI设备占用唯一的一段PCI地址,以便于PCI总线统一寻址。每个PCI设备通过PCI寄存器中的基地址寄存器来指定映射的首地址。PCI地址空间对应于计算机系统结构中的PCI总线。2、系统地址空间
数字字符串转十六进制 数字字符串转十六进制char HexChar(char c){ if((c>='0')&&(c<='9')) return c-0x30; else if((c>='A')&&(c<='F')) return c-'A'+10; else if((c>='a')&&(c<='f')) return c-'a'+10; else return 0x10;}//将
MFC中定时器OnTimer函数的使用 在MFC中我们经常需要定时读写数据,或者定时刷新界面,更新数据和状态,这就需要用到定时器,其实现函数为OnTimer,下面对其用法步骤(基于VS2010)进行简要说明:1、在类视图中点击需要使用定时器的对话框类,在属性窗口选择消息,在下面的消息函数中选中WM_TIMER,后面选择添加OnTimer函数,如下图所示: 2、编写OnTimer函数void CLD_PowerDl
Run-Time Check Failure #3 - The variable 'comstat' is being used without being initialized 方案1: 改变项目配置属性一种解决方案是改变基本运行时检查(changing the runtime checks in project settings):在菜单Project->Project properties-> C/C++ -> Code generation-> Basic Runtime checks --> change to 'Default',在中文版中是:项目-
vxworks中vxbus使用入门 或许用过vxworks操作系统的人不多。但作为曾经的嵌入式操作系统老大,介绍一下还是非常有意义的。开发步骤1. 添加新模块(这里会告诉vxworks该模块的入口函数);2. 填充vxbDevRegInfo,并通过vxbDevRegister进程注册驱动程序;3. 通过向hcfDeviceList数组中添加记录,完成设备
解决WinDbg调试VMWare虚拟机连接不上 /*设定端口*/在VMware建立系统Windows XP SP3,并正确设定了端口号:增加"串行端口","\\.\pipe\com_1""该端是服务器。""另一端是应用程序。"选中 "已连接"选中 "启动时连接"设置虚拟机Windows XP SP3系统中的 boot.ini文件multi(0)disk(0)rdisk(0)partition(1)\W
挂死在starting at 0x308000... 需要修改config.h文件,将#define LOCAL_MEM_LOCAL_ADRS (0x00100000) 修改成:#define LOCAL_MEM_LOCAL_ADRS (0x00300000) 以下是引用yzw999在2006-3-25 17:11:00的发言:需要修改config.h文件,将#define
嵌入式系统 Boot Loader 技术内幕 1. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot Loader 两大部分。2. Linux 内核。特定于嵌入式板子的定制内核以及内核的启动参数。3. 文件系统。包括根文件系统
DPC(延迟过程调用)的技术细节 -DPC(延迟过程调用)的细节NTINSIDER,16卷,1期,1至2月2009延迟过程调用(DPC)是一种Windows常用功能。用途是广泛和多样的,但最常用的是我们通常所说的“ISR完成”和WindowsTimer底层技术。 如果DPC常用,为什么还要写此篇?我们发现,大多数人并不真正了解DPC工作的底层实现细节。并且,事实证明,一个深入的理解,在选择选项创建D
Windows 驱动机制-定时、DPC及延时 1、定义Timer及DPCtypedef struct _DEVICE_EXTENSION { . . . KDPC Dpc; KTIMER Timer; } DEVICE_EXTENSION, *PDEVICE_EXTENSION;
PagedPool 和 NoPagedPool的区别 PoolType在 MSDN的介绍上有 N 种, 其实常用的只有 2 种:PagedPool 和NonPagedPool。PagedPool是分页内存,简单来说就是物理内存不够时,会把这片内存移动到硬盘上,而NonPagedPool是无论物理内存如何紧缺,都绝对不把这片内存的内容移动到硬盘上。 在往下讲之前,先补充一个知识, 就是我们操作的内存,都是虚拟内存,和物理内存是两码事。 但虚
记录windows驱动开发inf文件详解 Windows驱动程序开发相关1. 驱动的注册表位置:1. 硬件子键:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Enum指明硬件的HID,VID,DID等跟硬件和硬件厂商相关的信息。2. 服务子健:HKEY_LOCATION_MACHINE\SYSTEM\ControlSet001\Services它主要是跟
1553B总线常见问题解释 1、1553B总线的耦合方式有哪些? 有直接耦合和变压器耦合两种方式。 2、1553B各种耦合方式的总线有效距离是多少?扩展总线的有效距离又是多少? a. 直接耦合方式的1553B总线有效距离可达30.5厘米,变压器耦合方式的1553B总线有效距离可达6.1米。 b. 通过耦合器设备扩展总线,有效距离可达100米。 3、1553B总线的传输速度是
精准计算程序或CPU运行时间 精准计算程序或CPU运行时间下面就是计算读寄存器所耗时间:LARGE_INTEGER t1, t2, tc; QueryPerformanceFrequency(&tc); QueryPerformanceCounter(&t1); WORD wNewPos = 0; TG_ReadReg( Handle, 0x100, &wNewPos, 1 );QueryPerforman
SylixOS入门指南--架设开发环境 本文编辑环境本文在windows7(64位)上使用Google Chrome浏览器编辑,为保证截图效果,所有截图均使用PicPick截取,windows7使用Windows 7 Base主题,即关闭了Aero特效。本文目的本文目的在于帮助SylixOS爱好者获得SylixOS操作系统源代码、搭建开源的SylixOS集成开发环境、编译及调试SylixOS操作系统。
PC104上配置VxWorks硬盘启动详解 DEVPC104-SYS是一款在 PC104 尺寸上开发出来的嵌入式工业主板。以其小巧的体积﹑超强的功能和稳定性,可广泛应用于自动查询系统﹑POS 机﹑网络终端﹑仪器仪表﹑信息家电、工业控制等各种嵌入式领域。 VxWorks 是美国 Wind River System 公司推出的一个实时操作系统。通常所指的VxWorks操作系统对应软件包括三个部分:引导程序boo
VxWorks6.6开发共享库指南要点 开放封闭原则(OCP,Open Closed Principle)是所有面向对象原则的核心。软件设计本身所追求的目标就是封装变化、降低耦合,而开放封闭原则正是对这一目标的最直接体现。在软件架构中,模块化编程思想将系统分成很多的模块,模块内部关注自身需要实现的核心业务。模块间的低耦合,而模块内的高聚合。在Windows、Linux及unix等操作系统中,我们常常看见动态链接库(.dl
Samsung S3C2440平台上的Vxworks BSP移植 BSP概述 VxWorks操作系统将所有硬件的功能函数分别放到一系列库中,这些库就被称为板级支持包BSP。BSP是连接VxWorks操作系统与硬件平台的一个接口软件包,在引导系统、支持系统运行过程中扮演着重要的角色,首先,通过BSP可以生成引导操作系统的bootrom;其次,引导行工程的建立基础就是BSP;最后,BSP具有与用户交互的作用,可以提供一个基础的硬件调试环境。BSP还可以
vxworks启动WDB没起来这从硬盘起来的,从网络起来没有问题 现象wdbCommDevInit: Couldnot find device ata=0,0, unit 0 !wdbCommDevInit: couldnot get device namewdbConfig: errorconfiguring WDB communication interface上边是加载前,后边是加载后办法
C语言结构体的对齐原则 C语言结构体的对齐原则Q:关于结构体的对齐,到底遵循什么原则?A:首先先不讨论结构体按多少字节对齐,先看看只以1字节对齐的情况:#include #include #define PRINT_D(intValue) printf(#intValue" is %d", (intValue));#define OFFSET(struct,member
MFC中IPADDRESS控件的使用 MFC中IPADDRESS控件的使用void CMyDlg::OnIPAddress() { // 此段代码:独立的获取本机IP地址和计算机名 WORD wVersionRequested; WSADATA wsaData; char name[255]; CString ip; PHOSTENT hos
c++编程:获取控件上的文本值---例子是CEdit 的七种方法(转载) 1. int num1,num2,num3;char ch1[10],ch2[10],ch3[10];GetDlgItem(IDC_EDIT1)->GetWindowText(ch1,10);GetDlgItem(IDC_EDIT2)->GetWindowText(ch2,10);num1=atoi(ch1);num2=atoi(ch2);num3
i2c 协议解析 1、基本概念 主机 初始化发送,产生时钟信号和终止发送的器件 从机 被主机寻址的器件 发送器 发送数据到总线的器件 接收器 从总线接收数据的器件 多主机 同时有多于一个主机尝试控制总线 但不破坏报文 仲裁
SPI总线协议介绍 SPI总线协议介绍一、技术性能 SPI接口是Motorola 首先提出的全双工三线同步串行外围接口,采用主从模式(Master Slave)架构;支持多slave模式应用,一般仅支持单Master。时钟由Master控制,在时钟移位脉冲下,数据按位传输,高位在前,低位在后(MSB first);SPI接口有2根单向数据线,为全双工通信,目前应用中的数据速率可达几Mbps的
Linux常用指令---grep(搜索过滤) Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响
静态链接库和动态链接库 一、静态库与动态库通常情况下,对函数库的链接是放在编译时期(compile time)完成的。所有相关的对象文件(object file)与牵涉到的函数库(library)被链接合成一个可执行文件(executable file)。程序在运行时,与函数库再无瓜葛,因为所有需要的函数已拷贝到自己门下。所以这些函数库被成为静态库(static libaray),通常文件名为“libxxx.
完整的Linux嵌入式环境搭建(Ubuntu 9.10) 完整的Linux嵌入式环境搭建(Ubuntu 9.10)安装完Linux系统后(以Ubuntu 9.10为例),就需要进行Linux嵌入式开发环境搭建。1、修改/etc/apt/sources.list进行修改,然后
Ubuntu(Linux)使用Eclipse搭建C/C++编译环境 Ubuntu(Linux)使用Eclipse搭建C/C++编译环境 这两天,给自己电脑弄了双系统,除了原来的Windows 7系统外,装上了Linux系统,使用的版本是Ubuntu(点击可到相应的下载页面)。开始我装的Linux版本是fedora9,对于一个根本没接触过Linux系统的人而言,使用fedora,简直让人崩溃。更崩溃的是,我用的英文版。没的办法,又重新下载Linu
将win32程序移植到linux注意事项 对于这个问题,网上已经有很多资料给予了介绍,但是相比于这些信息,本文立足于个人的实践,将内容具体到开发环境和源代码,我觉得还是有很多值得总结和借鉴的。首先声明开发环境。Win32程序的开发环境是VS.NET 2008,编程语言是C;Linux使用的RHEL 5.4,GCC的版本是4.1.2,编程语言也是C。然后依次说明移植的对象:数据类型/字符串处理/系统调用/套接字/进程/进
Linux初级驱动执行流程 一、初级驱动执行流程:1、写好Makefile文件,里面包含将应用程序编译成app文件,将驱动程序编译成mydrv.ko文件的脚本2、在Ubuntu里执行sudo make3、确保mydrv.ko和app被拷贝到nfs挂载的根文件系统的/modules目录4、在模块中创建设备节点(在串口软件显示的开发板文件系统里执行) mknod /dev/dcx-drv c
一个完整的linux 驱动demo 加应用测试 demo 驱动代码driverdemo.c[cpp] view plain copy print?#include #include #include #include #include #include #include #include #include #incl
WIN7下编译NIOS2出现如下错误提示:make:***[**.mk] Error 1 或者 make: *** [**.elf] Error 1 我的系统是WIN7,QuartusII和NIOS2的版本都是10.0,按照特权同学的《特权和你一起学NIOS2--第三章 流程实践案例——手把手第一个工程》操作,前面都很顺利,后来在Eclipse里建好了软件工程之后,编译(Build Project),出现如下错误提示:make:***[**.mk] Error 1 或者 make: *** [**.elf] Error 1。看了很多论坛
Ubuntu下面安装eclipse for c++ 今天终于找到了一篇很好得文章,在Ubuntu下面怎么很方便的安装eclipse,太好了,下面分享一下~1. 下载jre,eclipse,cdt其中jre是Java运行环境,eclipse需要先装jre,才可能运行,cdt是在eclipse中运行c\c++程序的插件。1.1 下载jre网址是:java.sun.com,点击java se,红色划线部分(如下图)
Ubuntu9.10安装FTP服务 Ubuntu9.10安装FTP服务1.修改源列表打开"终端窗口",输入"sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak 备份原来的源"-->回车-->"输入当前登录用户的管理员密码"-->回车,然后输入"sudo gedit/etc/apt/sources.list",把下边代码替换掉,这样就可以了。#de
查看linux ssh服务信息及运行状态 关于ssh服务端配置有不少文章,例如 Linux下ssh服务配置,这里仅列举出一些查看ssh服务相关信息的常用命令.rpm -qa | grep ssh 可以看到系统中ssh安装包rpm -ql openssh-3.5p1-6 查看该安装包安装信息(如安装路径,配置文件等)ps -e | grep ssh 查看ssh服务有没有运行,如果有,可以看到类似以下内容:2254 ? 0
Eclipse中出现Type 'xxxx' could not be resolved的处理方法 ①选择工程->Properties->C/C++ General->Indexer②勾选Enable project specific settings③勾选Index unused headers as C++ files
vi/vim多行注释和取消注释 多行注释:1. 进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来2. 按大写字母I,再插入注释符,例如//3. 按esc键就会全部注释了 取消多行注释:1. 进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列
Vim多行缩进及高级命令 Vim多行缩进技巧1.按v进入visual状态,选择多行,用>或2. 通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n==排版,相当于一般IDE里的code format。使用gg=G可对整篇代码进行排版。3.gg shift+G 首尾4
程序运行时缺少libpng.so.3---Linux 程序运行时缺少libpng.so.3find / -iname "libpng*.so*" 2>/dev/null查看根目录下所有libpng库文件,看是否能找到该库文件;用lld 命令,查看程序依赖的所有库文件;sudo apt-get install libpng3:i386 安装libpng.so.3库文件
Ubuntu进不入系统,一直停留在ubuntu图标画面 在VMware中对Ubuntu进行“关闭电源”后,再次进入,一直停留在ubuntu的图标画面,无法进入系统了!网上也有别的网友碰到这个问题:http://forum.ubuntu.org.cn/viewtopic.php?p=1985549启动界面:ESC for Boot Menu:Enter Setup:GNU GRUB:Reco
Ubuntu 下忘记用户名和登录密码的解决方法 (1)首先Restart系统(右上角下拉后有个选项)(2)长按Shift键,直到出现下面菜单。选择recovery mode,也就是恢复模式。(3)接下来会进入如下界面,选择Drop to root shell prompt ,也就是获取root权限。(4)在下面的# 后面敲入 cat /etc/shadow 查看用户名(如果连用户名都忘记的话)(5)敲入:pass
C++版循环缓冲区类 [cpp] view plain copy print?// 声明 class CCycleBuffer { public: BOOL isFull(); BOOL isEmpty(); void Empty(); int GetLength(); CCycleBuffer(int size);
error LNK2001: unresolved external symbol __endthreadex 解决办法 error LNK2001: unresolved external symbol __endthreadex这个问题,找到的解决办法如下没有用到beginthreadex endthreadex两个例程.在VC中编译程序时显示Linking...nafxcw.lib(thrdcore.obj) : error LNK2001: unresolved external sy
__stdcall,__cdecl,_cdecl,_stdcall,__fastcall,_fastcall 区别简介 1.今天写线程函数时,发现msdn中对ThreadProc的定义有要求:DWORD WINAPI ThreadProc(LPVOID lpParameter);不解为什么要用WINAPI宏定义,查了后发现下面的定义。于是乎需要区别__stdcall和__cdecl两者的区别; #define CALLBACK __stdcall#define WINAPI __stdcall
多线程六 经典线程同步之信号量Semaphore 1、首先来看看如何使用信号量 信号量Semaphore常用有三个函数,使用很方便。下面是这几个函数的原型和使用说明。第一个 CreateSemaphore函数功能:创建信号量函数原型:HANDLE CreateSemaphore( LPSECURITY_ATTRIBUTES lpSemaphoreAttributes, LONG l
赛普拉斯 cypress Cyapi使用心得 Cyapi使用心得(1)--USB连接2009-11-07 19:23 用Cyapi也有一阵了,这个确实比EZusb的api好用,简单说下Cyapi的使用心得,在编程中应该注意的一些问题,毕竟,说起来,那个CYapi的说明文档讲的实在太简单了点,好多东西都讲得不明白,只能在使用中自己慢慢积累了。 首先说下前提,固件架构是EZ-
[Kernel] Linux 4.10.0+ 下编译安装内核模块(Hello World为例) 所用的发行版为 Ubuntu 16.04 LTS,使用内核 4.10.0+Step1. 在某个目录(比如~/workspace)下创建以下两个文件/*hello.c*/#include #include int init_module(void){ printk(KERN_INFO "init_module() called"); return 0;}void
驱动模块静态编译到 Linux 内核 一、准备好可以正常引导开发板的源码二、在内核源码kernel文件夹的driver目录下,创建led_arm文件夹 mkdir drivers/led_arm三、将“LED驱动实验”的驱动程序拷贝到led_arm目录下(详情见上一次LED驱动博客) 将led.c拷贝在该文件夹下面Kconfig就是对应着内核的配置菜单。假如要想添加新的
在linux内核文件中添加自己的驱动,添加自己的linux驱动,编译自己的linux驱动程序方法和例子图文 写这个文章,我参考了网上的一些博客:http://bbs.chinaunix.NET/thread-3634524-1-1.htmlhttp://www.bkjia.com/gjrj/800182.html也参考了参考了 《Linux驱动开发详解》3.4章节,实现建立自己驱动目录。文章中的驱动范例是:linux设备驱动开发详解第二版 的 glob
Linux2.6所有内核下载地址 http://www.kernel.org/pub/linux/kernel/v2.6/Index of /pub/linux/kernel/v2.6Name Last modified Size Parent Directory - incr/
关于错误 openssl/ssl.h:没有那个文件或目录的解决办法 首先得安装openssl:sudo apt-get install openssl当 #include后编译报错:openssl/ssl.h:没有那个文件或目录的解决办法解决办法为: sudo apt-get install libssl-dev build-essential zlibczlib-bin libidn11-dev libidn11安装上边的依赖就好了。
Ubuntu16.04版安装VMwareTools的步骤和没法挂载目录问题的解决方法 vmtool安装流程1.点击vmware 里面的虚拟机——》安装vmware tool2.然后(等待一会)弹出一个界面把里面的 VMwareTools-9.6.1-1378637.tar.gz 复制到自己的家目录3.解压VMwareTools-9.6.1-1378637.tar.gz tar -xzvf VMwareTools-9.6.1-1378637.tar.gz4.进入vmw
将Vim改造为强大的IDE—Vim集成Ctags/Taglist/Cscope/Winmanager/NERDTree/OmniCppComplete(有图有真相) 1、安装Vim和Vim基本插件首先安装好Vim和Vim的基本插件。这些使用apt-get安装即可:lingd@ubuntu:~/arm$sudo apt-get install vim vim-scripts vim-doc其中vim-scripts是vim的一些基本插件,包括语法高亮的支持、缩进等等。vim中文帮助文档tar包下载地址:http://sourceforge.net/pr
拼装的艺术:vim之IDE进化实录 KenThompson告诉我们——“一个程序只实现一个功能,且做到极致,多个程序协作实现复杂任务”——这是unix。是嘀,这种哲学在Linux上随处可见,比如,vim与她的插件们(白雪公主与她的小矮人们 -_-$)。下面开始我们的vim之IDE进化之旅吧。 这个时代,上规模的软件项目已不可能用简单的文本编辑器完成,IDE是必然选择。linux下IDE大致分为两类:“品牌
编译cscope-15.8b遇到的问题与解决方案 编译cscope-15.8b遇到的问题与解决方案1)环境Ubuntu16.042)遇到的问题:1.build.c:52:20:致命错误:curses.h:没有那个文件或目录;2.解决问题前面,链接不通过;3.安装失败;3)解决方案1.安装libncurses5-dev,sudo apt-get install ncurses-dev2.重新配置编译,./conf
归并排序的C++实现 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,并令i和k分别加上1
总结5种比较高效常用的排序算法 1 概述 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序、插入排序、归并排序、希尔排序、快速排序等。算法性能比较如下图所示: 2 选择排序 选择排序的第一趟处理是从数据序列所有n个数据中选择一个最小的数据作为有序序列中的第1个元素并将它定位在第一号存储位置,第二趟处理从数据序列的n-1个数据中选择一个
WDM驱动程序开发之读写设备存储器:KMemoryRange类 KMemoryRange类:一、Overview KMemoryRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。考虑到可移植性,所有对memory周期(memory cycle)进行译码的设备驱动程序必须用这个类对memory的位置(location)进行正确的访问(access)。KMemoryRange是KPeripheralAddress类的派生类。
WDM驱动程序开发之读写设备寄存器:KIoRange类 KIoRange类:一、Overview KIoRange类将一系列特殊的外围总线的地址映射到CPU总线的地址空间。CPU总线上的地址即可能在CPU的I/O空间,也可能在CPU的内存空间,这取决于平台和外围总线的控制方式。考虑到可移植性,所有对I/O周期(I/O cycle)进行译码的设备驱动程序必须用这个类对I/O的位置(location)进行正确的访问(access)。KIo
WDM驱动程序开发之PCI设备的配置空间:KPciConfiguration, KPciSlot类 KPciConfiguration, KPciSlot类:一、Overview KPciSlot类和KPciConfiguration类用于在驱动开发过程中协助支持基于PCI总线的设备。KDevice的派生类可以包含KPciConfiguration类的一个实例来存取设备配置空间的内容。为了满足这些需要,驱动编写人员需要提供PCI vendor ID和device ID给它的构造
把Vim改装成一个IDE编程环境(图文) 把Vim改装成一个IDE编程环境(图文)By:吴垠Date:2007-09-07Version:0.5Email:lazy.fox.wu#gmail.comHomepage:http://blog.csdn.net/wooinCopyright:该文章版权由吴垠和他可爱的老婆小包子所有。可在非商
LINUX操作系统VIM的安装和配置 1、VIM的安装ubuntu系统:普通用户下输入命令:sudo apt-get install vim-gtkcentos系统:普通用户下输入命令:yum -y install vim*2、VIM的配置刚安装的VIM,可能界面并不是十分友好,这就需要我们去更改vim的配置文件,按照我们的需求去修改它。在命令行下
Linux Vim命令 曾经使用了两年多的Vim,手册也翻过一遍。虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享。1. 关于Vimvim是我最喜欢的编辑器,也是Linux下第二强大的编辑器。 虽然emacs是公认的世界第一,我认为使用emacs并没有使用vi进行编辑来得高效。 如果是初学vi,运行一下vimtutor是个聪明的决定。 (如果你的系统环境不是中文,而你想使用中
linux下vi命令大全 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复f
linux中mmap系统调用原理分析与实现 1、mmap系统调用(功能) void* mmap ( void * addr , size_t len , int prot , int flags ,int fd , off_t offset ) 内存映射函数mmap, 负责把文件内容映射到进程的虚拟内存空间, 通过对这段内存的读取和修改,来实现对文件的读取和修改,而不需要再调用read,write等操作。
Linux内核编译详解 学习了网上的一些资料,自己试着摸索了一下,整理出此文。由于在下水平相当有限,不当之处,还望大家批评指正^_^重要的参考资料有:http://raspberrypi.stackexchange.com/questions/192/how-do-i-cross-compile-the-kernel-on-a-ubuntu-hosthttp://blog.
linux驱动基础开发0——linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer): 主要利用C库函数和Linux API进行应用软件的编写; 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编程技巧:多进程、多线程、进程间通信、多任务之
linux驱动基础开发1——linux 设备驱动基本概念 学习linux设备驱动首先我们必须明确以下几个概念,为我们接下来学习linux驱动打下坚实的基础:应用程序、库、内核、驱动程序的关系设备类型设备文件、主设备号与从设备号驱动程序与应用程序的区别用户态与内核态Linux驱动程序功能一、应用程序、库、内核、驱动程序的关系 1)应用程序调用一系列函数库,通过对文件的操作完成
linux驱动基础开发2——linux 驱动开发前奏(模块编程) 一、Linux内核模块简介 linux内核整体结构非常庞大,其包含的组件也非常多。我们怎么把需要的部分都包含在内核中呢? 一种办法是把所有的需要的功能都编译到内核中。这会导致两个问题,一是生成的内核会很大,二是如果我们要在现有的内核中新增或删除功能,不得不重新编译内核,工作效率会非常的低,同时如果编译的模块不是很完善,很有可能会造成内核崩溃。 linu
linux驱动基础开发3——linux 内核配置机制(make menuconfig、Kconfig、makefile)讲解 前面我们介绍模块编程的时候介绍了驱动进入内核有两种方式:模块和直接编译进内核,并介绍了模块的一种编译方式——在一个独立的文件夹通过makefile配合内核源码路径完成 那么如何将驱动直接编译进内核呢? 在我们实际内核的移植配置过程中经常听说的内核裁剪又是怎么麽回事呢?我们在进行Linux内核配置的时候经常会执行make menuconfig这个命令,然后屏幕
Linux内核多线程——补充(各种平台下的多线程) 这里主要实现两个线程间通信,当flag = 10 之后通知另外一个线程(也就是“Linux内核多线程(二)”中的程序的各种平台实现)。首先是C++ 11 的方式:#include #include #include #include #include #include using namespace std;const int M = 10;int main()
Linux内核多线程(四) 自己创建的内核线程,当把模块加载到内核之后,可以通过:ps –ef 命令来查看线程运行的情况。通过该命令可以看到该线程的pid和ppid等。也可以通过使用kill –s 9 pid 来杀死对应pid的线程。如果要支持kill命令自己创建的线程里面需要能接受kill信号。这里我们就来举一个例,支持kill命令,同时rmmod的时候也能杀死线程。#include #include #inc
Linux内核多线程(三) 接上 一篇文章 ,这里介绍另一种线程间通信的方式:completion机制。Completion机制是线程间通信的一种轻量级机制:允许一个线程告诉另一个线程工作已经完成。为使用 completion, 需要包含头文件 。可以通过以下方式来创建一个 completion :DECLARE_COMPLETION(my_completion);或者, 动态创建和初始化:
Linux内核多线程(二) 内核多线程是在项目中使用到,自己也不熟悉,遇到一个很囧的问题,导致cpu运行100%。这是写的第一个内核线程程序,通过全局变量来实现两个内核线程之间的通信。但是这里遇到致命错误,就是:每当 wait_event_interruptible()被wake_up_interruptible 唤醒之后线程就进入死循环。后面发现是线程不会主动的自己调度,需要显式的通过schedule 或者 sch
Linux内核多线程(一) Linux内核可以看作一个服务进程(管理软硬件资源,响应用户进程的种种合理以及不合理的请求)。内核需要多个执行流并行,为了防止可能的阻塞,支持多线程是必要的。内核线程就是内核的分身,一个分身可以处理一件特定事情。内核线程的调度由内核负责,一个内核线程处于阻塞状态时不影响其他的内核线程,因为其是调度的基本单位。这与用户线程是不一样的。因为内核线程只运行在内核态,因此,它只能使用大于PAGE_OFFS
vim查看函数原型 首先还是安装,vim不用装了,ubuntu中自带,用到的ctags需要自己安装一下,不要用旧的那个ctags,新的叫Exuberant Ctags,apt安装即可: [plain] view plain copy print?apt-get install exuberant-ctags 然后按照vim.or
线程绑定CPU核 Linux系统提供API函数sched_setaffinity和sched_getaffinity用于设置或获取线程的可以使用的CPU核。int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask);这个函数中pid表示需要设置或获取绑定信息的线程id(或进程id),如果为0,表示对当前调用的线
CPU状态信息us,sy,ni,id,wa,hi,si,st含义 使用系统命令top即可看到如下类似信息:Cpu(s): 0.0%us, 0.5%sy, 0.0%ni, 99.5%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st但不知什么含义?google之I try to explain these:us: is meaning of "user CPU time"sy: is meaning of "s
linux绑定进程到指定cpu 方法之一:top -p `pidof 进程名称`方法之二:top -p `ps h -o pid -C 进程名称`如果还要查看此进程下的各线程,可用如下:top -H -p `pidof process`----------------------------------------------我是分割线-------------