自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(110)
  • 资源 (13)
  • 收藏
  • 关注

原创 python入门(三) 实现QQ自动发送消息

前言前面二章简单过了一下python的基本知识,最近刚好需要实现QQ自动发送消息的脚本,于是便拿python来练手。业务逻辑1、打开需要发送消息的窗口2、锁定该窗口3、将需要发送的内容放到QQ窗口4、模拟按键发送enter键发送消息(QQ发送消息有二种方式Enter/Ctrl+Enter,本次案例使用Enter)环境win10 + python3.7.1从业务上...

2018-10-28 18:52:44 71711 74

原创 随机数生成器,基于软件的伪随机数算法

在工程中有时候需要用到随机数函数来模拟一些情况,例如加密系统的密钥来源可以用随机数函数获取。一般来说随机数函数需要有以下性质:1:随机性,不存在统计学偏差,是完全散乱的数列。2:不可预测性:不能从过去的的数列推算出下一个出现的数3:不可重现性:除非数列保存下来,否则不能重新相同的数列(比较难)。根据以上三个性质,可以将随机数函数分为“弱伪随机数”,“强伪随机数”,“真随机数”。其中“真随机数”靠软...

2018-06-24 15:57:50 10204 1

原创 go开发质量工具 go test、gofmt、golint快速上手

前言:go开发集成工具满足开发过程中单元测试、性能测试、代码格式化、代码规范检测需求。单元测试:测试文件以性能测试:代码格式化:代码规范检测:

2021-05-15 07:39:33 731 8

原创 eggjs框架学习心得

前言: eggjs作为阿里开源的企业级 Node.js 框架,其官网教程https://eggjs.org/zh-cn/tutorials/index.html介绍的很详细,可以帮助初学开发者快速搭建运行eggjs框架。本文主要介绍一些本人对eggjs的学习心得,也建议初学者从官网教程进行学习,然后找开源项目进行仿照实战。eggjs框架目录结构 官网的目录结构介绍缺了不少,以下是我整理的eggjs框架目录结构。 ...

2021-05-06 22:34:41 636 8

原创 【C/C++】软件异常状态快速定位技巧

前言在软件运行过程中遇到的崩溃问题,可能无法找到复现步骤,难以复现。此时使用日志或者Debug方法就很难定位出现异常的代码位置。本文主要讲述如何通过崩溃生成的信息去定位异常代码位置。Window PC软件崩溃位置定位以Visual Studio 2017为例,在工程配置属性【生成映射文件】上设置【是】工程编译完,会在生成目录生成对应的map文件,map文件需要与软件共同打包发布。当软件运行过程中出现崩溃...

2021-04-11 21:19:33 1947 4

原创 FATFS文件系统架构及源码介绍

前言:FATFS作为一个优秀的文件系统开源项目,具有高性能、易移植的特点。本文主要分三个部分:FATFS的架构介绍、源码剖析。架构:FATFS处于应用层和磁盘IO层之间,对应用层提供的接口封装风格与标准C的文件操作接口风格一致,应用程序只需进行少量的修改即可使用。对与磁盘IO层,FATFS完全与其分开,开发人员需要自己实现FATFS中diskio.h中声明的磁盘控制函数,其架构如下:源码剖析:FATFS源代码精简,只包括diskio.h、diskio.c、ff.h、ff.c、f.

2021-03-08 23:48:49 1065 1

原创 交叉编译报错【uClibc was built without large file support】和【undefined reference to `getcontext`】解决方法

前言:在使用mpis平台的交叉编译工具编译openssl+curl库时,遇到uClibc was built without large file support和undefined reference to `getcontext`编译报错。问题分析uClibc was built without large file support:该问题是由于开发人员在配置和构建uClibc编译器时没有开启Large File Support大文件支持导致的。可通过增加编译选项-D_FILE_OFFS

2021-03-08 13:59:12 966

原创 设置GRPC日志输出,用于捕捉内部段错误前抛出的ERROR信息

前言: 如果你软件中使用了grpc,记住一定要设置grpc的日志输出。grpc其内部实现中一旦抛出error信息,便会导致软件段错误。而你此前调用grpc的函数可能一切都是正常的。设置GRPC日志输出 博主平常使用的是Glog作为日志库,本次例子是将grpc的日志输出转到glog中。下面是代码片段,函数头文件应该是在grpc\impl\codegen\log.h里。/* grpc_log转glog的回调函数 */static void grpc_log_to_glog_fun(g...

2020-10-09 23:33:49 2055 1

原创 【已解决】鲲鹏CPU移植GRPC库,builder.BuildAndStart()接口阻塞问题

GRPC版本:v1.30.0 c++uname -a: Linux localhost.localdomain 4.14.0-115.el7a.0.1.aarch64 #1 SMP Sun Nov 25 20:54:21 UTC 2018 aarch64 aarch64 aarch64 GNU/Linux操作系统:CentOS Linux release 7.6.1810 (AltArch)问题描述:int RunServer(std::string stdAddr){ .

2020-07-14 10:49:04 1079 9

原创 Window平台Grpc框架搭建

Grpc源码下载1、下载git软件2、运行命令【git clonehttps://github.com/grpc/grpc.git】下载源码3、运行命令【cdgrpc】【git submodule update --init】下载依赖性4、下载速度较慢的人可以直接从云盘下载成品:链接:https://pan.baidu.com/s/1K1ZpjLk_zLa3RfJ_KPYKjw提取码:sirq复制这段内容后打开百度网盘手机App,操作更方便哦Grpc工程搭建1、下载...

2020-06-14 15:43:38 563

原创 【干货分享】使用Inno Setup设计扁平化风格的安装包

前言:本文将提供一个通用的扁平化风格安装包模板。模板参考有道云设计,兼容win10、win7等操作系统。模板及相关软件学习资料下载路径:链接:https://pan.baidu.com/s/1ue7Exd5ZrQycr2jClJV2EQ提取码:qz85复制这段内容后打开百度网盘手机App,操作更方便哦模板风格及功能展示:1、支持服务条款阅读;2、支持用户自定义安装路径;3、支持用户选择是否安装完后打开软件;4、支持用户选择是否安装完后打开官网;安装向导图:..

2020-05-31 13:57:37 1746

原创 聊一聊HTTPS安全性原理以及如何在GIN框架中运用

前言:编写本文的目的是让新手们快速了解HTTP协议相关知识,文中列举的信息如果有误,希望你能指出。期待大家共同进步。HTTTPS安全性原理HTTP是建立在TCP协议之上的请求响应协议,由于安全性需求衍生出HTTPS网络协议,因此HTTPS处于HTTP和TCP协议中间,建立起安全可靠的HTTP通道。HTTPS的安全性是依赖于SSL协议,在客户端和服务器通讯前,二者根据SSL协议,完成身份认证、加密算法,加密密钥的确定。其保证了前者保证了通讯双方不会遭受中间人攻击,后者保证通讯的内容在传输时是出

2020-05-29 23:28:53 3130

原创 Golang gin框架 快速搭建

前言:安装gin总是一大堆依赖报错... ...Window下载地址:链接:https://pan.baidu.com/s/1yktRIfHSpzpH0kRcU5_H5w提取码:i62p解压后直接放在 $GOPATH对应目录即可。测试程序:package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/ping", func(c *gin.Context) {...

2020-05-18 22:48:05 386

原创 LeetCode刷题笔记(一)

1、Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sam...

2020-05-17 21:41:32 236

原创 GO语言学习笔记(五)并发、通道、反射

并发 golang支持逻辑上处理多个任务即并发,golang中的coroute协程的支持是优秀的,其本质上利用了多线程和协程配合提高处理器时间片的利用率。使用go可以创建一个并发单元,使用WaitGroup可以让主线程等待并发单元执行完再推出。关于golang中并发的详细设计可以参考:https://blog.csdn.net/wjb123sw99/article/details/10541...

2020-04-25 14:37:34 389

原创 GO语言学习笔记(四)方法和接口

方法 golang中实例对象的方法与C++中类的公有方法类似,是一种面向对象编程的基本概念,可以说方法是与对象实例绑定的特殊函数。方法与普通函数的区别在于定义时方法有前置实例接收参数(receiver),receiver声明了方法所属的实例对象,package mainimport "fmt"type N inttype Y intfunc (arg N) test(i ...

2020-04-19 14:25:23 331

原创 Conway’s Game of Life介绍及实现

前言:  博主在看新闻时,浏览到John Horton Conway因新型冠状病毒感染而去世。这场疫情带走了许多领域杰出的大师们,希望全人类早日战胜疫情。 John Horton Conway的生命游戏为不少数学家和码农所熟知,本篇主要介绍了Conway’s Game of Life以及基于C++的实现。生命游戏规则:1、 生命游戏规则有些类似与围棋,游戏背景为假设有无尽...

2020-04-16 23:29:23 1958

原创 GO语言学习笔记(三)流控制、函数

流控制golang精简了控制语句,但足够我们使用。if...else语句需要注意一点的是对初始化语句的支持。

2020-04-12 21:56:38 146

原创 浅谈操作系统中进程、线程、协程的联系

前言:最近在学习golang语法特性,golang和其它语言最大区别莫过于goroutine,这块知识点博主已经太久没有温固,对协程认知已经处于盲点。因此本文主要带你认知操作系统中进程、线程、协程。进程在Window系统中,打开任务管理器,你可以看到当前操作系统中正在运行的进程详细信息。在Linux系统中,运行top命令,你可以看到当前操作系统中正在运行的进程详细信息。...

2020-04-09 18:42:40 263

原创 使用CUnit对库做单元测试

前言:博主目前手头上管理着几个设备的跨平台库,对外接口大概有七八十个,平常写测试用例的test文件就有几十个。趁着最近版本发布后的空闲时间,对接口库进行单元测试。与Junit CppUnit类似,CUnit为C程序员提供了基本的测试功能,且提供了几种不同的界面来运行测试和报告结果。个人而言,更喜欢xml格式的报告。入门:Cunit的下载地址是:https://sourceforge.n...

2020-04-09 15:30:53 576

原创 GO语言学习笔记(二)指针、切片、字典、结构体

指针golang中指针变量的值为被指向变量的地址,指针变量可以通过地址去访问并修改被指向对象的值。需要注意的是golang禁止对指针变量的值做修改。此外如果局部变量的地址被指针变量引用,具备变量的生命周期大于等于该指针的生命周期。package mainimport "fmt"func point() *int { var x int = 2 fmt.Println(&amp...

2020-04-06 16:44:13 957

原创 GO语言学习笔记(一)变量、常量、枚举

前言:博主在开发C/C++程序过程中,遇到的许多语法繁琐困扰,在学习GOLANG时。都予以解答。GOLANG的语法特性让我惊喜。本文会忽略一些语法通识,如果你有C或者C++语言基础,你可以阅读博主的学习笔记让你快速对golang的语法有认知。如果你是新手,建议阅读《go圣经》来完成你的入门。代码格式化golang提供代码风格格式化工具gofmt,运行命令【gofmt -w 目标文件...

2020-04-04 22:32:40 586

原创 glog配置与持久化记录

最近采用了glog作为一个项目的日志库,作为轻量级日志库,其功能完备,下面列举了一些大家常用的日志配置。场景一:将日志输出到指定文件夹和终端中:#include <iostream>#include "glog/logging.h"using namespace std;int main(int argc, char** argv){ google::InitG...

2020-03-28 22:17:51 5537 2

原创 关于SM4填充算法PKCS5和PKCS7讲解

前言: 今天刚好在系统上增加SM4算法的支持,SM4算法的实现网上你可以搜到很多版本,但是如果你要运用到实际中时,你一定要来接SM4算法填充规则。正文: 首先,SM4接口大多是以最小单位16Byte进行加解密。因此SM4的密文长度通常是16Byte的倍数。当你待加密数据小于16Byte时,你便需要使用填充算法。PKCS7填充算法规则:PKCS7填充单位为16Byte,对于...

2020-03-21 20:20:55 16600 4

原创 Nginx入门及正向代理实例

前言 本文主要讲述Nginx功能、正反向代理部署方式,下一次将讲述Nginx内部参数调优设置和常见问题解决方案。简介Nginx作为一种基于REST架空的Web跨平台服务器。基于事件驱动架构,使得其可以支持数以百万级别的 TCP 连接。由于Igor Sysoev 将 Nginx 代码开源,并且赋予BSD授权协议,因此Nginx拥有丰富的第三方功能插件。安装本文选择的平台是Ubu...

2020-03-14 23:40:42 1434

原创 【记录】Linux服务器关机启动后无法识别到串口文件的解决办法

1、使用lsusb命令查看正常状态下,对应的串口线型号;2、博主使用的是USB转串口线【HL-340】,换了一根【FT232】型号的USB转串口线后,问题便消失了。3、如果其他人出现了串口问题,可以依次去尝试【FT232】、【cp2102】、【pl2303】、【HL-340】型号...

2020-03-11 16:35:23 970

原创 设备指纹介绍

引言 编写目的 本文主要阐述目前互联网上用于反欺诈解决方案,设备指纹技术。设备指纹技术设备指纹是可以用于唯一标识出该设备的设备特征,设备指纹应用平台主要为手机、Pad、PC等互联网设备。设备指纹技术实现方式分为三种:主动式、被动式、混合式。 主动式设备指纹采集技术 主动式指主动采集设备上固有的、较难篡改的、唯一的设备标识作为设备指纹,用于唯一标识该台设备。这类设备标识统称...

2020-03-01 16:54:01 2518

原创 VS 2008软件OPEN项目导致软件停止工作问题解决办法

1、在开始中找到VS2008的命令行2、运行devenv/Safemode 命令

2020-02-19 11:38:48 249

原创 【CURLE_RECV_ERROR】错误码解决

前言:  年末出大坑,目前博主项目中对外提供的设备接口库涉及到网络通信,部分HTTP请求概率性出现【CURLE_RECV_ERROR】问题。博主使用的是libcurl第三方库进行http请求,由于网上没有查到相关资料,下面记录一下,本次问题分析和解决办法,希望能给其他人提供解决思路。问题定位:通过Wireshark抓包,我对比了正常时候的HTTP流和异常时候的HTTP流。异常HTT...

2020-01-13 00:56:06 5298

原创 【C】【RCRE】正则表达式从入门到实战

前言:正则表达式(Regular Expression)用于检索符合自定义规则的文本。例如在检索用户输入的手机号、身份证号有效性,用户设置的密码是否安全等场景时,正则表达式所体现的功能非常强大。当然,它的缺点也很明显,其不易于阅读。本文示例使用C语言正则表达式引擎RCRE,通过实例让你更快上手。入门:正则表达式是由普通字符(大小写字母、数字、标点等)和元字符组成。常用的元字符如下:...

2019-12-22 18:11:02 658

原创 交叉编译libcurl,遇到libtool: eval: line 1722: syntax error near unexpected token `|'

记录交叉编译libcurl中遇到的编译错误,之前用arm-linux-gnueabihf-gcc编译器,编译正常,但是切换成aarch64-himix100-linux-gcc遇到编译报错libtool: eval: line 1722: syntax error near unexpected token `|'解决方案:1、export NM=nm2、./configure --p...

2019-12-08 22:53:45 752

原创 【以后再也不会用了】Libuv异步定时事务

前言:  应项目需求在设备接口中封装了异步事件处理,考虑到跨平台性选用了libuv工具包,接口需求是异步定时处理一些逻辑运算,结果在对着API使用的过程中发现,libuv在很多回调函数封装中,没有封装传参!大概以后再也不会用了!异步定时事务代码:#include <stdlib.h>#include <uv.h>#include <stdio.h&g...

2019-11-05 16:34:32 266

原创 window动态调用第三方库

前言:最近项目紧急,有一段时间没写博客了。在项目开发过程中,同事问了一个问题,我尝试给他解决后,在此记录一下。在项目中,我针对二种不同的设备,给上层封装了一套C接口,即使用同一个头文件,调用不同的驱动库,即可对设备进行操作。同事在编写上层应用时,不知道如何调用。本文讲述的一个方法是使用【LoadLibrary】、【GetProcAddress】、【FreeLibrary】来解决这个问题,...

2019-11-02 12:48:58 289

原创 异步串口通信框架

前言:  前段时间,服务器增加串口通信需求,早期串口框架仅仅只能支持单串口通信,还不支持热插拔。  由于在网上找了下没有自己想要的框架,因此,自己搭建了一个异步串口通信框架, 目前该框架已投入使用,没有发现内存泄露或者其他问题。该框架运用了【libserialport】【libuv】开源库,二者都支持跨平台,因此在可以放心在其他平台下使用该框架。  如果你确定要使用我的框架,请阅读最后...

2019-08-06 22:46:29 3028 1

原创 C函数获取(Dos/Shell)系统命令输出

#include <stdio.h>#include <stdlib.h>#define SYSTEMFILE "qcard_system.txt"/******************************************************************************** Function Name : QCard_Sys...

2019-08-03 21:35:49 174

原创 【交叉编译】ubantu交叉编译Android平台动态库(.so文件)、静态库(.a文件)

前言:  本文主要写给C工程师,如何提供Android平台的C库给第三方使用。平台:ubantu14.04 64bit交叉编译工具:android-ndk64-r10-linux-x86_64.tar交叉编译工具下载地址: 链接:https://pan.baidu.com/s/1VCttTraUoSh82ENVA4t3Og 提取码:sjwo搭建交叉编译环境:1、将an...

2019-07-25 11:53:05 1755

原创 【记录】Error:LNK2001:无法解析外部符号 _imp__stdio_common_vsprintf

【情节】今天,突然有合作公司的工程师打电话跟我说,他们的工程加入我提供的lib库后报这个问题。我让对方把工程发过来,结果在我的开发环境下直接能编译过。【原因】对方使用的是VS2013,而我的开发环境是VS2017。在VS2013环境下缺少部分Lib标准库。【解决方法】我用VS2010给他们重新编译了一遍库文件。(高版本适配低版本)【结论】集成开发环境到底用新一点还是旧一...

2019-07-23 17:53:34 4583 1

原创 【VS2017】将DLL封装成ActiveX控件(OCX文件)详细步骤

前言  最近组内WEB工程师在做浏览器的加密卡识别登陆功能,由于JS不能进行太复杂操作,因此委托我使用C编写DLL库封装成OCX控件给他调用。我也是第一次编写该类程序,查阅了不少资料,在此分享给大家。  本文使用的平台:Win10系统+Visual Studio 2017软件正文建立工程1、打开Visual Studio 2017软件,点击【文件】、【新建】、...

2019-07-21 21:05:00 6933 2

原创 ubantu14 64位搭建linux-arm交叉编译环境

下载安装包:arm-linux-gcc-4.4.3.tar.gz(https://pan.baidu.com/s/1E3Vtr9TPMBLL24bnrtQLjw password tor3)以root用户运行下面命令1、解压安装包命令:tar xvzf arm-linux-gcc-4.4.3.tar.gz -C /2、创建目录mkdir /usr/local/arm...

2019-07-14 19:37:01 363

转载 设备“VMnet0”上的网桥没有运行。该虚拟机无法与此主机或网络上的其他主机进行通

源:https://jingyan.baidu.com/article/17bd8e521775fb85ab2bb8e0.html解决方案: 故障现象,导致虚拟机无法正常上网 设备管理器中的驱动设备正常加载,但是注意这两个虚拟网卡是有问题的 将这两个虚拟网卡删除 只剩物理网卡了,重新启动电脑 ...

2019-07-05 11:25:40 21517 9

FATFS开发文档.docx

前言: FATFS作为一个优秀的文件系统开源项目,具有高性能、易移植的特点。本文主要分二个部分:FATFS的架构介绍、源码剖析。

2021-03-08

sg.modules

可以通过sg驱动程序访问所有类型的SCSI设备。这意味着可以通过sr和sg驱动程序访问CDROM驱动器之类的设备。其他SCSI设备(例如扫描仪)只能通过sg驱动程序进行访问。sg驱动程序能够识别256个SCSI设备。加载sg驱动程序后,可以添加任意数量的设备(最大总数量为256)。 有关SCSI通用(sg)驱动程序文档,请参见参考W4(也可以找到sg_utils软件包)。有关SCSI标准的信息,请参见参考文献W1;有关SCSI编程的书籍,以及通过机制的信息,请参见参考文献B3。 lk 2.4中的sg驱动程序是“版本3”,它添加了附加的接口结构和一些新的ioctl()。最有趣的新ioctl()是SG_IO,它发送SCSI命令并等待其响应。有关 sg驱动程序的完整说明,请参见Linux Documentation Project网站: www.tldp.org/HOWTO/SCSI-Generic-HOWTO/。可以在www.torque.net/sg/p/sg_v3_ho.html上找到本文档的(可能是更高版本)版本 。 内核中使用缩写“ sg”来指代SCSI通用驱动程序和许多现代IO设备(通常与DMA相关联)提供的分散收集功能。上下文通常会清楚地指出要引用的是哪一个。例如,请注意名称为SG_GET_SG_TABLESIZE的扭曲sg ioctl(),其中第二个“ SG”指的是散点图。 sg的公共接口可以在文件 /usr/src/linux/include/scsi/sg.h中找到。根据发行版本的不同,该信息可能包含也可能不包含与GNU库维护者控制的 /usr/include/scsi/sg.h相同的信息。如果这两个文件不同,请使用前一个头文件。那些基于sg编写应用程序的人应该查看其文档,以获取有关此问题的更多信息。

2020-04-21

CUnit单元测试Window平台库和源码

CUnit is a lightweight system for writing, administering, and running unit tests in C. It provides C programmers a basic testing functionality with a flexible variety of user interfaces. CUnit is built as a static library which is linked with the user's testing code. It uses a simple framework for building test structures, and provides a rich set of assertions for testing common data types. In addition, several different interfaces are provided for running tests and reporting results. These interfaces currently include:

2020-04-07

pl2303.zip

文档中包含linux、MAC、Windows、Windows CE、GPC的PL2303驱动程序

2019-07-04

随机数测试工具及文档

适用于加密应用的发生器可能需要满足比其他应用更强的要求。特别是,在没有输入知识的情况下,它们的输出必须是不可预测的。本文件讨论了表征和选择适当发电机的一些标准。还讨论了统计测试的主题及其与密码分析的关系,并提供了一些推荐的统计测试。这些测试可用作确定发生器是否适合特定加密应用的第一步。然而,没有一套统计测试可以绝对证明发电机适合在特定应用中使用,即统计测试不能代替密码分析。发电机的设计和密码分析超出了本文的范围。

2019-03-30

A-PAINLESS-GUIDE-TO-CRC-ERROR-DETECTION-ALGORITHMS

网上有一篇介绍CRC 算法的非常好的文章,作者是Ross Williams,题目叫:“A PAINLESS GUIDE TO CRC ERROR DETECTION ALGORITHMS”

2019-03-27

cp2102驱动

cp2102 usb to uart win10 64位驱动是目前的最新版本,这个驱动兼容win10 64位系统,同时还兼容32位系统。cp2102是一款多功能的全速功能控制器,内含了上电复位电路、时钟电路、USB收发器等,安装小编提供的驱动程序后就可以正常使用了。

2019-03-27

Valgrind使用手册

valgrind-3.14.0,2018年10月9日的用户手册 Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。

2019-01-01

OCI备份还原代码参考

使用OCI接口对ORACLE中的表进行备份, 代码类型C 开发:2018年 时暑

2018-11-08

ELDK使用与开发手册

1. 概要 这是嵌入式PowerPC, ARM和MIPS系统中使用DENX U-Boot和Linux的指导手册。文档中描述了如何在嵌入式PowerPC, ARM和MIPS系统上配置、编译、使用Das U-Boot(常常缩写为“U-Boot”)和Linux操作系统。文档中涵盖了所有你可能需要的用于配置、编译、运行U-Boot和Linux的工具。 2. 绪论 首先,我们介绍如何安装交叉编译开发工具Embedded Linux Development Kit(ELDK),这个开发套件你很有可能会用到——至少当你在标准的x86 PC上使用Linux或者Sun Solaris系统作为开发环境的时候,你会需要它的。 然后,我们会阐述通过串口与你的目标板连接:你需要配置一个终端控制程序,如cu或者kermit。 你常常需要通过网线把映像文件下载到你的目标板上。为了实现这个目的,你需要TFTP和DHCP/BOOTP服务器。文档中提供了简要的相关配置说明。 接下来则是描述如何配置和编译U-Boot使之适用于某个特定的平台,以及如何安装和在该硬件平台上运行。 下一步的工作是配置、建立和安装Linux。我们使用SELF(Simple Embedded Linux Framework)来展示如何建立一个开发环境(包括通过NFS挂载的根文件系统)和一个嵌入式目标板配置(从基于busybox的ramdisk映像文件中运行)。 本文档不会给出如何把U-Boot或者Linux移植到一个新的硬件平台,而是默认你的开发板已经被U-Boot和Linux所支持。 本手册各种文档格式的最新版本可以从以下网址获取: · HTML http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.html · plain ASCII text http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.txt · PostScript European A4 format http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.ps · PDF European A4 format http://www.denx.de/wiki/publish/DULG/DULG-canyonlands.pdf 3. 嵌入式Linux开发工具套件 嵌入式Linux开发工具套件(ELDK)包括GNU交叉开发工具,如编译器、binutils、gdb等工具,和一些已经编译好的目标工具以及负责提供在目标平台上函数调用的库文件。还免费提供了所有的源代码,包括全部补丁、扩展文件、以及用于编译开发工具使用的程序和脚本。安装包都是基于RPM包管理器。 3.1 获取ELDK 可以通过以下方式获得ELDK。 ·DENX计算机系统光盘 ·从以下服务器中下载 FTP方式 ftp://mirror.switch.ch/mirror/eldk/eldk/ ftp://sunsite.utk.edu/pub/linux/eldk/ ftp://ftp.sunet.se/pub/Linux/distributions/eldk/ ftp://ftp.leo.org/pub/eldk/ HTTP方式 http://mirror.switch.ch/ftp/mirror/eldk/eldk/ http://ftp.sunet.se/pub/Linux/distributions/eldk/ http://archiv.leo.org/pub/comp/os/unix/linux/eldk/ 3.2 初始安装 初始安装可以使用放在ELDK目录树根目录下的安装工具。安装工具使用语法如下; $ ./install [-d ] [] [] … -d 确定ELDK安装在哪个目录。如果省略ELDK会安装在当前目录。 确定目标平台的CPU。如果此项设置了一项以上的参数,则会将这些CPU的支持都安装。如果省略将会安装所有CPU的支持。你也可以把ELDK安装到任何空目录下,这么做的唯一条件是你有那个目录的写和执行权限。安装过程并不需要超级用户的特权。由安装时的参数决定安装几个目标组件集合。ELDT包是肯定会安装的。 $ export CROSS_COMPILE=ppc_4xx- //加入环境变量 $ PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin //加入PATH 这样加入的话,每次重启系统后必须重新加入,一劳永逸的办法是编辑/root/.bashrc 加上 export CROSS_COMPILE=ppc_4xx- export PATH=$PATH:/opt/eldk/usr/bin:/opt/eldk/bin 重启系统后即可使用ELDK。 4. 系统设置 在目标平台上安装和配置U-Boot和Linux需要一些工具。特别是在开发过程中,你需要和目标平台保持联系。这一节将告诉你如何配置你的主机以达到上述目的。 4.1 设置串口 为了更好地使用U-Boot和Linux,你需要通过串口将目标板和你的主机连接。U-Boot和Linux可以配置成自动执行而不需要任何用户的干涉。 通过串口有很多种方法来控制你的目标板,比如说使用终端服务器。不过最常见的做法是使用你本机的串口,这时,你主机需要安装一个终端程序,如cu或者kermit。 4.2 配置“kermit” kermit这个名字就代表了它是连接串口和网络的通信软件。事实上在很多计算机和操作系统上使用它,能够很好地满足我们的目的。 kermit在执行其它命令之前,会执行你的用户目录下的初始文件.kermrc,所以可以非常简单的通过初始化命令来定制kermit。下面是使用U-Boot和Linux时推荐配置: ~/.kermrc: set line /dev/ttyS0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file name lit set rec pack 1000 set send pack 1000 set window 5 这个设置假定你使用的是主机第一个串口(/dev/ttyS0),以115200这个波特率与目标板的串口连接。 然后你可以连接目标板了: $ kermit -c Connecting to /dev/ttyS0, speed 115200. The escape character is Ctrl-\ (ASCII 28, FS) Type the escape character followed by C to get back, or followed by ? to see other options. —————————————————- 下载kermit这个软件时,你会发现有两个kermit包。你只需要安装ckermit。其中gkermit仅仅是实现kermit传输协议的一个命令行工具。如果你主机上的Linux系统没有安装kermit,你可以到kerimt的官方网站 http://www.columbia.edu/kermit/ 下载。 4.3 使用minicom minicom是另外一种非常流行的串口通信终端。很遗憾的是,很多用户发现在使用U-Boot和Linux时,minicom有很多问题,尤其是试图使用它来下载image的时候。因此,不推荐大家使用minicom。 4.4 配置TFTP服务器 使用U-Boot下载Linux内核或者应用程序的最快捷的方法是通过网络传输。为了这一目的,U-Boot实现了TFTP协议(参见U-Boot中的tftpboot命令)。为了使主机支持TFTP,你必须确保TFTP后台程序/usr/sbin/in.tftpd已经安装。在RedHat系统中,你可以运行下面的命令来确认: $ rpm -q tftp-server 如果没有安装,请从你的Linux安装盘或者其它媒介安装。 大多数的Linux发行版都默认关闭TFTP服务。以RedHat系统为例,如果要使能TFTP服务,编辑文件/etc/xinetd.d/tftp,移除这一行: disable = yes 或者注释掉它,或者修改disable = no 此外,确保/tftpboot目录存在,而且有访问权限(至少应该"dr-xr-xr-x")。 5. Das U-Boot 5.1 当前版本 Das U-Boot(或者简称“U-Boot”)是针对嵌入式PowerPC, ARM, MIPS和x86处理器的开放源代码软件。U-Boot项目已经在Sourceforge设立,你可以访问这个官方网站:http://www.denx.de/wiki/UBoot U-Boot最新版的源代码可以在Sourcefoge通过匿名CVS得到。当要求输入匿名用户anonymous的密码时只需要直接按下回车键。 $ cvs -d:pserver:anonymous@www.denx.de:/cvsroot login $ cvs -z6 -d:pserver:anonymous@www.denx.de:/cvsroot co -P u-boot 官方发布的U-Boot也可以通过FTP方式获取。你可以到ftp://ftp.denx.de/pub/u-boot/下载tar形式的压缩包。 或者通过git的方式获取: git clone git://www.denx.de/git/u-boot.git u-boot/ git clone http://www.denx.de/git/u-boot.git u-boot/ git clone rsync://www.denx.de/git/u-boot.git u-boot/ 5.2 源代码包的解压 如果你是通过CVS得到的U-Boot源代码,你可以跳过这一步,因为你得到的已经是解压后的目录树了。如果你是从FTP服务器上下载的tar压缩包,那么你需要按照以下步骤解压: $ cd /opt/eldk/usr/src $ wget ftp://ftp.denx.de/pub/u-boot/u-boot-1.3.2.tar.bz2 $ rm -f u-boot $ bunzip2 < u-boot-0.4.5.tar.bz2 | tar xf - $ ln -s u-boot-0.4.5 u-boot $ cd u-boot 5.3 配置 $ export BUILD_DIR=/opt/eldk/build //指定编译的输出目录 进入U-Boot源代码根目录后,可以先使用如下命令确保已经清除以前编译的结果: $ make distclean 下一步是为Makalu板配置U-Boot: $ make makalu_config (译者注:应该根据你自己的具体开发板配置,如$ make _config,如果没有相应的开发板,应该自己照着建立相应的目录和配置文件。) 最后我们可以开始编译U-Boot了: $ make all 5.4 安装 5.4.1 动手之前 5.4.1.1 安装所需 以下的章节假定你的开发板使用flash作为存储设备。如果不是,则以下的指令不会工作。如果你想使用U-Boot,需要换掉存储设备。 5.4.1.2 开发板识别数据 所有的Makalu开发板使用一个序列号加以识别。而且开发板需要分配一个以太网MAC地址。如果这些数据丢失,你可能会失去授权。在安装U-Boot或者改变开发板的配置之前,你需要搜集足够的信息。 5.4.2 使用BDM/JTAG调试器安装U-Boot.bin 把数据烧入flash中的一个简单而又快速的办法是通过BDM或者JTAG接口的调试器或者flash烧写器。当flash中没有任何数据(比如说一块新的开发板),这种方法是唯一的选择。 我们(强烈推荐)使用Abatron公司的BDI2000(见http://www.abatron.ch/BDI/bdiGDB.html )。 其它的BDM/JTAG调试器也可以使用,但是如何操作它们不是本文档要讨论的范围。如果你想使用别的工具请参照它们的说明文档。(我没有使用BDI2000,故略去操作BDI2000的方法。我烧写u-boot.bin就是简单地通过JTAG口。) 5.4.3 使用U-Boot安装U-Boot.bin 如果U-Boot已经在你的板子上安装运行,你可以使用这些命令来下载新的U-Boot映像来代替当前的。 警告:在你安装新的映像之前,你必须擦除当前的u-boot.bin。如果出现什么差错,你的开发板将不能运行。因此强烈建议: 做一个能工作的U-Boot映像文件的备份; 你清楚如何在一个新的开发板上安装u-boot.bin。 过程如下: => tftp 100000 /tftpboot/uboot.bin ARP broadcast 1 TFTP from server 10.0.0.2; our IP address is 10.0.0.100 Filename ””/tftpboot/uboot.bin””. Load address: 0×100000 Loading: ############################### done Bytes transferred = 155376 (25ef0 hex) => protect off 40000000 4003FFFF Un-Protected 5 sectors => era 40000000 4003FFFF Erase Flash from 0×40000000 to 0x4003ffff ……… done Erased 5 sectors => cp.b 100000 40000000 $(filesize) Copy to Flash… done => setenv filesize => saveenv Saving Enviroment to Flash… Un-Protected 1 sectors Erasing Flash… .. done Erased 1 sectors Writing to Flash… done Protected 1 sectors => reset 5.5 工具的安装 U-Boot加载Linux内核、Ramdisk或者其它映像时使用一种特殊的映像格式。这种格式包含了一些信息,如创建时间、操作系统、压缩格式、映像类型、映像名和CRC32校验和。 mkimage用来创建这种格式的映像文件或者显示它包含的信息。如果使用ELDK,那么mkimage这个命令已经包含在ELDK中。 如果你不想使用ELDK,你应该把mkimage安装在某个能够直接执行的目录里,比如: $ cp tools/mkimage /usr/local/bin/ 5.6 初始化 初始化你的Makalu板上的U-Boot,你需要通过终端连接板子的串口。 Makalu板的串口默认配置是波特率为115200/8N1(115200bps,每个字符8bit,无奇偶校验,1bit停止位,无握手)。 如果你的主机是Linux操作系统,我们建议你用kermit或者cu作为终端控制程序。确定硬件和软件控制流都已经关闭。 5.7 开始的步骤 在默认配置中,U-Boot运行在一种互动模式,它通过串口“UART1”提供命令行形式的用户接口。 这意味着U-Boot显示一个提示符(默认是:=>),等待着接受用户的输入。然后你输入一个命令,按下回车键。U-Boot将运行这个命令,然后又出现提示符等待下一条命令。 你可以使用help(或者简单地一个?)来查看所有的U-Boot命令。它将会列出在你当前配置下所有支持的命令。[请注意到尽管U-Boot提供了很多配置选项,并不是所有选项都支持各种处理器和开发板,有些选项可能在你的配置中并没有被选上。] => help ? – alias for ‘help’ askenv – get environment variables from stdin autoscr – run script from memory base – print or set address offset bdinfo – print Board Info structure boot – boot default, i.e., run ‘bootcmd’ bootd – boot default, i.e., run ‘bootcmd’ bootelf – Boot from an ELF image in memory bootm – boot application image from memory bootp – boot image via network using BootP/TFTP protocol bootstrap – program the I2C bootstrap EEPROM bootvx – Boot vxWorks from an ELF image cmp – memory compare coninfo – print console devices and information cp – memory copy crc32 – checksum calculation date – get/set/reset date & time dhcp – invoke DHCP client to obtain IP/boot params dtt – Digital Thermometer and Thermostat echo – echo args to console eeprom – EEPROM sub-system erase – erase FLASH memory exit – exit script ext2load- load binary file from a Ext2 filesystem ext2ls – list files in a directory (default /) fatinfo – print information about filesystem fatload – load binary file from a dos filesystem fatls – list files in a directory (default /) fdt – flattened device tree utility commands flinfo – print FLASH memory information getdcr – Get an AMCC PPC 4xx DCR’s value getidcr – Get a register value via indirect DCR addressing go – start application at address ‘addr’ help – print online help icrc32 – checksum calculation iloop – infinite loop on address range imd – i2c memory display iminfo – print header information for application image imls – list all images found in flash imm – i2c memory modify (auto-incrementing) imw – memory write (fill) imxtract- extract a part of a multi-image inm – memory modify (constant address) iprobe – probe to discover valid I2C chip addresses irqinfo – print information about IRQs isdram – print SDRAM configuration information itest – return true/false on integer compare loadb – load binary file over serial line (kermit mode) loads – load S-Record file over serial line loady – load binary file over serial line (ymodem mode) loop – infinite loop on address range loopw – infinite write loop on address range md – memory display mdc – memory display cyclic mii – MII utility commands mm – memory modify (auto-incrementing) mtest – simple RAM test mw – memory write (fill) mwc – memory write cyclic nand – NAND sub-system nboot – boot from NAND device nfs – boot image via network using NFS protocol nm – memory modify (constant address) pci – list and access PCI Configuration Space ping – send ICMP ECHO_REQUEST to network host printenv- print environment variables protect – enable or disable FLASH write protection rarpboot- boot image via network using RARP/TFTP protocol reginfo – print register information reset – Perform RESET of the CPU run – run commands in an environment variable saveenv – save environment variables to persistent storage setdcr – Set an AMCC PPC 4xx DCR’s value setenv – set environment variables setidcr – Set a register value via indirect DCR addressing sleep – delay execution for some time test – minimal test like /bin/sh tftpboot- boot image via network using TFTP protocol usb – USB sub-system usbboot – boot from USB device version – print monitor version =>使用help 你可以得到更多的命令信息: => help tftpboot tftpboot [loadAddress] [[hostIPaddr:]bootfilename] => => help setenv printenv setenv name value … - set environment variable ‘name’ to ‘value …’ setenv name - delete environment variable ‘name’ printenv - print values of all environment variables printenv name … - print value of environment variable ‘name’ => 大多数命令可以缩写,只要字符串的内容仍然可以被确定: => help fli tftp flinfo - print information for all FLASH memory banks flinfo N - print information for FLASH memory bank # N tftpboot [loadAddress] [[hostIPaddr:]bootfilename] => 5.8 首次上电 把主机指定的串口和在Makalu板上标有UART1的端口连接,运行终端程序,给Makalu板接上电源。你可以看到如下信息: => reset U-Boot 1.3.3-rc2-01466-g4f27098 (May 1 2008 – 13:57:57) CPU: AMCC PowerPC 460EX Rev. A at 600 MHz (PLB=200, OPB=100, EBC=100 MHz) Security/Kasumi support Bootstrap Option H – Boot ROM Location I2C (Addr 0×52) Internal PCI arbiter disabled 32 kB I-Cache 32 kB D-Cache Board: Canyonlands – AMCC PPC460EX Evaluation Board, 2*PCIe, Rev. 13 I2C: ready DTT: 1 is 48 C DRAM: 256 MB (ECC not enabled, 400 MHz, CL3) FLASH: 64 MB NAND: 32 MiB PCI: Bus Dev VenId DevId Class Int PCIE0: link is not up. PCIE0: initialization as root-complex failed PCIE1: link is not up. PCIE1: initialization as root-complex failed Net: ppc_4xx_eth0, ppc_4xx_eth1 Type run flash_nfs to mount root filesystem over NFS Hit any key to stop autoboot: 0 => => 你可以按下任意键来中止倒计数。如果你不那么做,你可能会看到一些(无关紧要的)错误,因为系统没有初始化。 有时你可能会看到一种信息: *** Warning – bad CRC, using default environment 这条信息没有害处,只要你初始化和保存环境变量之后,它就不会出现了。 首先,你必须输入你的开发板的序列号和网卡地址。需要特别注意的是,这些参数是写保护的,一旦保存了就无法改变(通常制造商已经设置好了)。使用U-Boot的setenv命令可以输入数据,命令后面跟上变量名和值,参数之间用空格(或者Tab符)隔开。例如,使用变量名serial#设置开发板的ID或者说序列号,变量名ethaddr用于设置以太网地址: => => setenv ethaddr !!!!!!FILL_THIS!!!!!! => setenv serial# CF56-216F-400A 使用printenv确认你已经输入正确的值: => printenv serial# ethaddr ## Error: "serial#" not defined ethaddr=5e:ed:18:38:81:85 => 请仔细核查显示值是否正确!等保存之后你将不能更正任何错误。如果发现错误,请重新启动开发板。如果检查无误,你可以使用saveenv命令永久保存这些参数。 => saveenv Saving Environment to Flash… Un-Protected 1 sectors Un-Protected 1 sectors Erasing Flash… . done Erased 1 sectors Writing to Flash… done Protected 1 sectors Protected 1 sectors => 5.9 U-Boot命令介绍 这一节将介绍U-Boot中最重要的指令。U-Boot可配置性非常强,所以并不是所有的命令都已经在你的硬件平台上安装,此外可能也有这儿没提到的命令。你可以使用help命令来显示根据你的配置所有可用的命令列表。 对于大多数命令,你不必打全这些命令,只需输入一些字符足以。比如,help可以简写为h。 一些命令的执行依赖于U-Boot的配置以及U-Boot中一些环境变量的定义。 所有的U-Boot命令都把输入的数字当作十六进制的格式。 不要使用除了退格键之外的其它编辑键,因为在诸如环境变量中隐藏的字符是很难被发现的。 具体命令略 6. Linux内核的编译 6.1 下载Linux内核 可以通过git下载到最新的内核,命令如下: $ cd /opt/eldk/usr/src $ git clone git://www.denx.de/git/linux-2.6-denx.git linux-2.6-denx $ cd linux-2.6-denx 6.2 内核的配置及编译 下面的步骤需要powerpc的交叉开发工具,所以您必须确认您的PATH变量中有ELDK的编译工具的地址。 首先使用下面的命令清除以前的编译信息: $ make mrproper 使用下面的命令导入适合Makalu开发板的默认配置,这些配置是经过官方多次测试的: $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- makalu_defconfig //导入默认配置 注:这些默认的配置文件位于arch/powerpc/configs/XXX_defconfig ,根据您的开发板的型号选择。如果找不到相应的配置文件,可以去arch/ppc/configs/中寻找相应的配置文件,那里还有一些。makalu_defconfig这个就是位于arch/ppc/configs/下面,而arch/powerpc/configs/中没有。 当然您还可以自己去修改内核的配置,使用如下命令: $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- config //手动改动配置 或者 $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- menuconfig //手动改动配置 注:因为一些问题(尤其是老版本的内核),"make xconfig"这个命令不被推荐 使用下面的命令编译内核: $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- uImage //编译 编译生成的目标文件uImage是通过mkimage(位于U-Boot包中) 创建的,位于/opt/eldk/usr/src/linux-2.6-denx/arch/powerpc/boot/uImage,它可以通过U-Boot来下载和引导 配置和安装模块使用如下命令: $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- modules $ make ARCH=powerpc CROSS_COMPILE=ppc_4xx- INSTALL_MOD_PATH=/opt/eldk/ppc_4xx modules_install 6.3 安装 将文件复制到tftpboot目录下面,然后通过tftp烧写: $ cp arch/powerpc/boot/uImage /tftpboot/uImage 7. 根文件系统的设计与编译 7.1 根文件系统的设计 嵌入式开发中根文件系统的设计并不是很容易的事,主要的问题是: (1)里面要包括哪些内容 (2)使用哪种文件系统类型 (3)怎样存储和引导 现在假设根文件系统中的内容我们已经知道,那么我们主要关注后面两点。 我们使用ELDK安装时生成的镜像 SELF (Simple Embedded Linux Framework),它位于 /opt/eldk//images/ 文件夹下,ramdisk_image.gz这个文件便是。 (1)解压ramdisk: $ gzip -d -c -v /opt/eldk/ppc_4xx/images/ramdisk_image.gz >/tmp/ramdisk_image //解压 (2)挂载ramdisk $ mount -o loop /tmp/ramdisk_image /mnt/tmp //挂载 (3)创建压缩文件,为了避免下面步骤需要root权限,不包括设备文件 $ cd /mnt/tmp $ tar -zc –exclude=’dev/*’ -f /tmp/rootfs.tar.gz * //创建tarball,为了避免下面步骤需要root权限,不包括设备文件 (4)将设备文件创建成单独的压缩文件(使用cramfs) $ tar -zcf /tmp/devices.tar.gz dev/ //将设备文件创建成单独的tarball $ cd /tmp (5)取消挂载 $ umount /mnt/tmp //取消挂载 7.2 根文件系统的编译 我们使用ramdisk的形式来生成根文件系统的镜像文件,一般情况下,它使用ext2文件系统。 (1)创建目录,解压压缩文件 $ cd /opt/eldk/ $ mkdir rootfs $ cd rootfs $ tar zxf /tmp/rootfs.tar.gz (2)我们使用genext2fs来创建ramdisk镜像文件,因为它使用一个简单的文本文件来描述设备,因而不需要root权限。使用设备表rootfs_devices.tab: # /dev d 755 0 0 – - – - - /dev/console c 640 0 0 5 1 – - - /dev/fb0 c 640 0 0 29 0 – - - /dev/full c 640 0 0 1 7 – - - /dev/hda b 640 0 0 3 0 – - - /dev/hda b 640 0 0 3 1 1 1 16 /dev/kmem c 640 0 0 1 2 – - - /dev/mem c 640 0 0 1 1 – - - /dev/mtd c 640 0 0 90 0 0 2 16 /dev/mtdblock b 640 0 0 31 0 0 1 16 /dev/mtdr c 640 0 0 90 1 0 2 16 /dev/nftla b 640 0 0 93 0 – - - /dev/nftla b 640 0 0 93 1 1 1 8 /dev/nftlb b 640 0 0 93 16 – - - /dev/nftlb b 640 0 0 93 17 1 1 8 /dev/null c 640 0 0 1 3 – - - /dev/ptyp c 640 0 0 2 0 0 1 10 /dev/ptypa c 640 0 0 2 10 – - - /dev/ptypb c 640 0 0 2 11 – - - /dev/ptypc c 640 0 0 2 12 – - - /dev/ptypd c 640 0 0 2 13 – - - /dev/ptype c 640 0 0 2 14 – - - /dev/ptypf c 640 0 0 2 15 – - - /dev/ram b 640 0 0 1 0 0 1 2 /dev/ram b 640 0 0 1 1 – - - /dev/rtc c 640 0 0 10 135 – - - /dev/tty c 640 0 0 4 0 0 1 4 /dev/tty c 640 0 0 5 0 – - - /dev/ttyS c 640 0 0 4 64 0 1 8 /dev/ttyp c 640 0 0 3 0 0 1 10 /dev/ttypa c 640 0 0 3 10 – - - /dev/ttypb c 640 0 0 3 11 – - - /dev/ttypc c 640 0 0 3 12 – - - /dev/ttypd c 640 0 0 3 13 – - - /dev/ttype c 640 0 0 3 14 – - - /dev/ttypf c 640 0 0 3 15 – - - /dev/zero c 640 0 0 1 5 – - - 具体的格式描述请参见genext2fs的帮助文档。 (3)使用genext2fs来创建一个ext2文件系统的镜像: $ ROOTFS_DIR=/opt/eldk/rootfs # 路径 $ ROOTFS_SIZE=8192 # 文件系统镜像的大小,如果此值太小,当生成的文件超过此值时,会报错 $ ROOTFS_FREE=100 # free space wanted $ ROOTFS_INODES=380 # number of inodes $ ROOTFS_DEVICES=rootfs_devices.tab # device description file $ ROOTFS_IMAGE=ramdisk.img # generated file system image $ genext2fs -U \ -d ${ROOTFS_DIR} \ -D ${ROOTFS_DEVICES} \ -b ${ROOTFS_SIZE} \ -r ${ROOTFS_FREE} \ -i ${ROOTFS_INODES} \ ${ROOTFS_IMAGE} (4)压缩文件 $ gzip -v9 ramdisk.img (5)创建适合U-Boot的images: $ mkimage -T ramdisk -C gzip -n ‘Test Ramdisk Image’ \> -d ramdisk.img.gz uRamdisk 至此,ELDK的开发环境便基本搭建完成。

2018-03-07

qt入门文档

Qt[1] 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。2008年,Qt Company科技被诺基亚公司收购,Qt也因此成为诺基亚旗下的编程语言工具。2012年,Qt被Digia收购。2014年4月,跨平台集成开发环境Qt Creator 3.1.0正式发布,实现了对于iOS的完全支持,新增WinRT、Beautifier等插件,废弃了无Python接口的GDB调试支持,集成了基于Clang的C/C++代码模块,并对Android支持做出了调整,至此实现了全面支持iOS、Android、WP,它提供给应用程序开发者建立艺术级的图形用户界面所需的所有功能。基本上,Qt 同 X Window 上的 Motif,Openwin,GTK 等图形界 面库和 Windows 平台上的 MFC,OWL,VCL,ATL 是同类型的东西。

2017-09-23

MinGW-gcc440_1

MinGW,是Minimalist GNUfor Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。MinGW 是一组包含文件和端口库,其功能是允许控制台模式的程序使用微软的标准C运行时(C Runtime)库(MSVCRT.DLL),该库在所有的 NT OS 上有效,在所有的 Windows 95发行版以上的 Windows OS 有效,使用基本运行时,你可以使用 GCC 写控制台模式的符合美国标准化组织(ANSI)程序,可以使用微软提供的 C 运行时(C Runtime)扩展,与基本运行时相结合,就可以有充分的权利既使用 CRT(C Runtime)又使用 WindowsAPI功能。

2017-09-19

qt-creator-windows-opensource-2.8.0

在发布 Qt 4.6 的同时,作为 Qt 开发跨平台 IDE 的Qt Creator也发布了更新版本。Qt Creator 1.3 和 Qt 4.6共同构成的 Qt SDK,包含了开发跨平台应用程序所需的全部功能。 Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。[2] Qt Creator包含了一套用于创建和测试基于Qt应用程序的高效工具,包括: 一个高级的C++代码编辑器 上下文感知帮助系统 可视化调试器 源代码管理 项目和构建管理工具 Qt Creator在LGPL2.1版本授权下有效,并且接受代码贡献。 Qt Linguist Qt Linguist被称为Qt语言家。它的主要任务只是读取翻译文件、为翻译人员提供友好的翻译界面,它是用于界面国际化的重要工具。 Linguist工具从4.5开始可以支持Gettext的PO文件格式。

2017-09-19

空空如也

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

TA关注的人

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