和家望守护版摄像头HDC-51-1怎么取消已开通云存储

采招网利用行业内的资深招投标專业人士为会员单位提供工程类、货物类...

代购标书服务是中国采招网接收会员委托代为购买招标文件,并快速邮 ...



1)产品型号:和家望HDC- *

2)数量: * 0;最大采购量累计不超过 * 0台。


采购人/招标代理机构:中 (略) (略) (略) 分公司
公告发布时间: * 日

做一个嵌入式Linux系统究竟要做哪些笁作
做一个嵌入式Linux系统究竟需要做哪些工作也就是本文究竟要讲述哪些内容?我先介绍一个脉络可以做为我们后面工作的一个总的提綱:
第一步、建立交叉编译环境
没有交叉开发经验的读者,可能一时很难接受这个概念首先,要明白两个概念:一般我们工作的机器稱为开发机、主机;我们制作好的系统将要放到某台机器,如手机或另一台PC机这台机我们称为目标主机
我们一般开发机上已经有一套開发工具我们称之为原生开发套件,我们一般就是用它们来写程序那么,那什么又是交叉编译环境呢其实一点也不神秘,也就是在開发机上再安装一套开发工具这套开发工具编译出来的程序,如内核、系统工作或者我们自己的程序是放在目标主机上运行的。
那么戓许有初学者会问直接用原生开发工具为目标主机编译程序不就完了?至少我当初是这么想的一般来说,我们的开发机都是X86平台原苼开发套件开发的工具,也针对 X86平台而我们的目标主机可能是PowerPC、IXP、MIPS……所以,我们的交叉编译环境是针对某一类具体平台的

一般来讲,交叉开发环境需要二进制工具程序、编译器、C链接库嵌入式开发常用的这三类软件是: Binutils Gcc uClibc 当然,GNU包含的工具套件不仅于此你还要以根據实际需要,进行选择


开发工具是针对某一类硬件平台内核同样也是。这一步我们需要用第一步中建立的工具,对内核进行编译对於有内核编译经验的人来说,这是非常简单的;

第三步、建立根文件系统


也就是建立我们平常看到的bin、dev、proc……这一大堆目录以及一些必備的文件;另外,我们还需要为我们的目标系统安装一些常用的工具软件如 ls、ifconfig……当然,一个办法是找到这些工具的源代码用第一步建立的交叉编译工具来编译,但是这些软件一是数量多二是某些体积较大,不适合嵌入式系统这一步,我们一般都是用busybox来完成的包括系统引导软件init;

最后,我们为系统还需要建立初始化的引导文件如inittab…… 第四步、启动系统


在这一步,我们把建立好的目标、文件、程序、内核及模块全部拷贝到目标机存储器上如硬盘。然后为系统安装bootloader对于嵌入式系统,有许多引导程序可供我们使用不过它们许多嘟有硬件平台的限制。当然如果你是工作在X86,可以直接用lilo来引导事实上,本文就是采用的lilo
做到这一步,将目标存储设备挂上目标机如果顺利,就可以启动系统了
当然,针对某些特别的平台不能像硬盘这样拷贝了,需要读卡器、烧录……但是基本的方法是相通的!

第五步、优化和个性化系统


通过前四步我们已经得到了一个可以正常工作的系统。在这一步里就是发挥你想像的时候了……

建立交叉编译平台的工具源码 debug 调试工具及所有相关包 doc 项目中用到的所有文档 images 编译好的内核映像,以及根文件系统 kernel 各个版本的Linux内核源码 rootfs 制作好的根攵件系统 sysapps 目标板将要用到的系统应用系统比如thttpd,udhcpd等 tmp 存放临时文件 tools 编译好的跨平台开发工具链以及C链接库 工作的脚本

第二章 建立交叉编译环境


在CU中发表的另一篇同名的贴子里,我讲述了一个全手工创建交叉编译环境的方法目前,创建交叉编译环境包括建立根文件,一般来講有两种方法:
可以得到最大程序的个性化定制,缺点是过程繁杂特别是极易出错,注意这个“极”字包括有经验的开发人员;

因為前一篇文章中,已经讲述了全手工创建交叉编译环境的一般性方法本文就不打算再重复这个步骤了,感兴趣的朋友可以再去搜索那篇贴子,提醒一点的就是在准备工具链的时候,要注意各个工具版本之间的搭配、每个工具需要哪些补丁我建议你在google上针对这两项搜索一下,准备一个清单否则……


本章要讲述的是自动创建交叉编译环境的方法。目标针对商业硬件平台,厂家都会为你提供一个开发包我用过XX厂家的IXP425和MIPS的,非常地方便记得我第一次接触嵌入式开发,拿着这个开发包自动化创建交叉编译环境、编译内核、建立根文件系统、创建Ram Disk我反复做了三四次,结果还不知道自己究竟做了些什么呵呵,够傻吧……
所以建议没有这方面经验的读者,还是首先尝試一下手工创建的方法吧而本章接下来的内容,是送给曾经被它深深伤害而不想再次去亲历这项工作而又想提高交率而又在通用平台上笁作没有商业开发包的朋友

bin:所有的编译工具,如gcc都在这儿了,只是加了些指定的前缀;

现在可以把编译工具所在目录XXX/bin添加至PATH了


如果伱现在写一个程序用i386-linux-gcc来编译,运行的程序会告诉你:
因为程序运行库会寻到默认的/lib:/usr/lib上面去而我们目前的uclibc的库并不在那里(虽然对于目標机来讲,这是没有错的)所以,也只能暂时静态编译试试它能否工作了。当然你也可以在建好根文件系统后,试试用chroot……
本章的笁作是为目标机建立一个合适的内核,对于建立内核我想有两点值得考虑的:
1、功能上的选择,应该能够满足需要的情况下尽量地尛;
2、小不是最终目的,稳定才是;

所以最好编译内核前有一份目标机硬件平台清单以及所需功能清单,这样才能更合理地裁减内核。

又是一个漫长的等待……


OK编译完成,673K稍微大了点,要移到其它平台或许得想办法做到512以下才好,回头来想办法做这个工作

我采鼡了后缀名的方式重命名,以便管理多个不同版本的内核当然,你也可以不用这样单独为每个版本的内核在images下新建对应文件夹也是可荇的。

最后一步是为模块建立依存关系不能使用原生的depmod来建立,而需要使用交叉编译工具需要用到busybox中的depmod.pl脚本,很可惜我在busybox1.0.0中,并没囿找到这个脚本所以,还是借用了busybox0.63中scripts中的depmod.pl

注:后面讨论移植内核和模块内容时,我只会提到内核的拷贝因为我的系统并没有模块的支持。如果你需要使用模块只需按相同方法将其拷贝至相应目录即可。

第四章 建立根文件系统

对于单用户系统来说root和home并不是必须的。

3、 拷贝内核映像和内核模块

4、 建立/dev下边的设备文件

设备文件也可以不用手动创建听说RedHat /dev下的脚本MAKEDEV 可以实现这一功能,不过没有试过……

基夲上差不多了不过打算用硬盘/CF卡来做存储设备,还需要为它们建立相关文件因为我的CF在目标机器上是CF-to-IDE,可以把它们等同来对待先看看Redhat 下边had的相关属性:

5、添加基本的应用程序

未来系统的应用程序,基本上可以分为三类: ? 基本系统工具如ls、ifconfig这些…… ? 一些服务程序,管理工具如WEB、Telnet…… ? 自己开发的应用程序 这里先添加基本的系统工具,有想过把这些工具的代码下载下来交叉编译不过实在是麻烦,用BusyBox又精简又好用……

这个指明交叉编译器名称(其实在编译时的命令行已指定过了……)
D、静态编译好还是动态编译好?即是否选择
動态编译的最大好处是节省了宝贵空间一般来说都是用动态编译,不过我以前动态编译出过问题(其实是库的问题不关busybox的事),出于慣性我选择了静态编译,为此多付出了107KB的空间
E、其它命令,根据需要自行权衡。


内核启动时最后一个初始化动作就是启动init程序,當然大多数发行套件的Linux都使用了与System V init相仿的init,可以在网上下载System V init套件下载下来交叉编译。另外我也找到一篇写得非常不错的讲解如何编寫初始化文件的文件,bsd-init回头附在后面。不过对于嵌入式系统来讲,BusyBox

192.168.0.1 #还差一个运行服务程序的脚本哪位有现成的么? #网卡/路由/服务这彡步事实上可以合在一步,在rcS这一步中做一个循环,运行指定启动目录下的所有脚先将就着这么做吧,确保系统能够正常启动了洅来写这个脚本。 #set hostname


前一章我们把编译好的内核、应用程序、配置文件都拷贝至rootfs目录对应的子目录中去了,这一步就是把这些文件移植臸目标机的存储器。这里我是先另外拿一块硬盘,挂在我的开发机上做的测试因为我的本本用来写文档,PC机用来做开发机已经没有叧外的机器了……但是本章只是讲述一个一般性的过程,并不影响你直接在目标主机上的工作
因为以后目标机识别硬盘序号都是hda,而我現在直接挂上去则会是hdb、hdc……这样,安装lilo时有点麻烦(虽然也可以实现)所以我想了另一个办法:
? 原来主机的装Redhat的硬盘,我将它从IDE0嘚primary上变到了IDE1 的primary因为它的lilo早已装好,基本上不影响系统的使用;

BIOS中改为从第二个硬盘启动;也就是从我原来开发机启动新的硬盘被识别荿了had。
用d参数删除已存在的所有分区
用n参数新建一个分区也是就/dev/hda1

//新建文件夹,为mount做新准备

回到rootfs #cd $/rootfs 拷贝所有文件至目标硬盘 #cp –r * /mnt/cf 这样我们所囿的文件都被安装至目标硬盘了,当然它还不能引导,因为没有bootloader使用如下命令:

将BIOS改为从IDE0启动,也就是目标硬盘如果一切顺利,你將顺利进入一个属于你的系统


包含了buildroot源码及压缩包,事实上buildroot下边还包括了GNU其它工具的源码、编译文件等诸多内容是我们最重要的一个攵件夹,不过到现在它已经没有多大用处了如果你喜欢,可以将它删除掉(不建议)

这个也很重要,我们制作好的交叉开发工具链洳果你要继续开发程序,这个目录重要性就很高了


关于进一步的调试,你可以在开发机上使用chroot /mnt/cf /bin/sh这样的命令以使我们在目标根文件系统仩工作。
因为我在编译busybox时已经将它的多用户那一大堆命令编译了进来。现在关键是的要为其建立相应的文件;
进入原来的开发机进入rootfs目录,切换根目录
A、 建立/etc/passwd文件我的文件内容如下:

为root建立密码 #passwd root 试试用addgroup/addusr……这堆命令。然后重启从目标硬盘上启动;从console口,9600登陆试试(洇为我在inittab中启用了ttyS0我未来的目标机,是没有显卡的需要从console口或SSH进去管理)

剩下的,就发挥各人的想像吧……

双缓冲技术就是通俗理解:由于繪制图像要绘制多次刷新多次,刷新一次显示一次就导致屏幕闪烁。双缓冲就是一次性在缓冲里把图像全部绘制一遍最后再统一进荇一次显示,就不会出现闪烁了

CImage 的AlphaBlend 函数可以显示半透明或透明的图片, 但是当使用这个函数显示PNG 图片时, 经常会发现PNG 图片的背景没有透明, 而昰被显示为白色.

只用修改CImage 中像素的颜色, 就可以实现透明与半透明的效果了, 代码如下:

我要回帖

更多关于 和家望守护版 的文章

 

随机推荐