clinux多线程
‘壹’ 关于ARM7/9及所用操作系统ucos、linux选择的问题
我在刚开始学习ARM的时候,也有你这样的困惑。我目前已经工作7年了,刚开始是搞单片机的。05开始学习ARM,06第一个项目是采用的arm7+uClinux,07开始用arm9+linux。感觉ARM7和arm9还有单片机,各有各的优缺点。实际工作中更多的是要考虑产品的性价比和可行性,对于一些很小的系统,能用低成本的,尽快会用低成本的解决,毕竟企业是追求效益最大化的。有时候,过分的想用更高性能的CPU,更好的操作系统,往往只是自己的一种爱好和满足感。不能实际解决问题。比如有个小的监控,我用ARM7和AMR9都可以做,但是我用ARM7可能只需要1个月就可以完成,而用arm9+linux不光成本高,难度和周期都会加大加长。所以选择方案一定要与实际的项目相匹配。任何一种技术其存在,就有其存在的道理。学会什么都不吃亏的。
至于要学什么,我的建议是循序渐进。这是符合人类自身的科学学习方法,如果简单的都学不好,搞更复杂的只会让自己受到打击越大。失去继续学习的信息。
我不知道你学习的专业是什么,如果是偏向硬件的,建议从硬件底层往上学,而如果你是学计算机专业的,对操作系统和多线程,API比较熟悉,建议你从上往下学。总之一句话,先从自己熟悉的开始入手,慢慢深入,循序渐进会越走越宽的,越走越顺的。
最后,祝你成功!
‘贰’ 嵌入式Linux系统工程师都学些什么
课程安排课程简介第一周 嵌入式C语言编程基础 主要介绍在嵌入式开发编程中C语言的重要概念和编程技巧中的重点难点,以复习串讲和实例分析的形式,重点介绍包括函数与程序结构,指针、数组和链表,库函数的使用等知识。第二周 Linux 操作和编程基础 主要介绍 Linux 的基本命令和基础编程知识,包括Linux的文件操作和目录操作命令,VI编辑器,GCC编译器,GDB调试器和 Make 项目管理工具等知识。第三周 Linux 上C 强化编程训练 主要包括整数算法训练,递归和栈编程训练,位操作训练,指针训练,字符串训练和常用C库函数编程接口实践,强化学员对Linux下基本编程开发的理解和编码调试的能力。第四-七周 Linux环境高级编程及项目开发编程实践 主要包括系统编程(信号/系统调用/管道/FIFO/消息队列/共享内存等),文件I/O编程(文件描述符/文件读写接口/原子操作/阻塞与非阻塞IO等),多任务和多线程编程(进程标识/用户标识/fork与vfork/多线程概念/线程同步等),网络编程(网络基本概念/套接口编程/网络字节次序/ Client/Server 结构/ UDP 编程);掌握Linux下Socket编程的开发流程,熟悉网络编程的调用接口函数和相关数据结构,使学员初步具备在Linux上进行系统编程开发的能力。同时综合之前所学内容和编程技术,以小组为单位进行一个团队合作项目的开发,考核内容包括文件I/O编程,多线程编程,网络编程和项目文档编写。期中考试第八-九周 嵌入式处理器体系结构及编程实践 主要介绍 ARM、MIPS、PowerPC等体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、汇编语言以及C\C++和汇编语言的混合编程等知识。同时结合ARM嵌入式开发板硬件设计原理和基本硬件设计流程,分析各种外设的工作原理和驱动机制,并自己动手实践完成一个ARM开发板上的编程大作业。第十-十一周 嵌入式Linux开发基础及高级应用 主要介绍嵌入式 Linux 开发应用程序的基本流程和知识,包括嵌入式Linux基本概念和开发流程、Bootloader 工作原理、内核裁减配置和交叉编译、根文件系统制作、网络编程及图形界面和数据库开发等知识。同时独立完成一个基于嵌入式Linux GUI的应用编程大作业。第十二-十三周 嵌入式 Linux驱动理论及驱动程序开发实践 主要介绍嵌入式 Linux 上驱动程序开发规范,包括设备驱动程序概念、字符设备驱动程序、块设备与网络设备、网卡驱动以及常用嵌入式设备驱动开发等知识。同时独立实现两种嵌入式设备驱动程序的编写,包括驱动模块的调试和加载以及完整的项目开发文档的编写。第十四-十五周 嵌入式Linux项目团队开发实践锻炼 主要包括设计并实现一个真实和完整的嵌入式项目的开发流程,涉及到数据采集、网络通讯、图形用户界面显示以及嵌入式数据库存储系统等多种嵌入式Linux编程技术。要求学员建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业前的职业技能和素质训练做好充分准备。毕业典礼培训目标学习内容掌握程度掌握三种编程语言C 语言精通 C++ 语言 了解 ARM 汇编语言 熟悉 掌握两种嵌入式Linux操作系统Linux精通 uCLinux精通 掌握两种嵌入式实时操作系统VxWorks 熟悉 uC/OS-II 熟悉 掌握三种处理器体系结构ARM 体系结构精通 MIPS 体系结构 熟悉 PowerPC 了解掌握五种ARM核处理器Samsung S3C2410/S3C44B0精通 Intel XScale PXA255精通 Philips LPC22xx精通 EP7312 熟悉 MIPS Godson 龙芯 熟悉 掌握两种硬件设计工具Candence PCB 熟悉 Protel 了解掌握两种Linux下编辑软件VI精通 EMACS 了解掌握两种串口通讯工具超级终端 (Windows) 熟悉 MiniCOM (Linux) 熟悉 掌握三种 Flash 烧写工具Flash Programmer (GUI) 熟悉 JFlash 烧写软件及原理精通 SJF系列烧写软件及原理精通 掌握两种调试工具JTAG 在线调试器 熟悉 SkyEye 仿真调试工具 熟悉 掌握两种集成开发环境ARM ADS 1.2精通 K-Develop IDE 熟悉 掌握一种源代码版本管理工具CVS 熟悉 掌握嵌入式 Linux整体开发流程 熟悉 GNU 交叉编译器使用Cross-compiler-gcc/g++精通 Linux Makefile 组织结构精通 Bootloader 启动代码u-Boot精通 RedBoot 熟悉 内核编译配置参数设置精通 内核调试 熟悉 文件系统JFFS2 文件系统精通 NFS 文件系统精通 ROMFS 文件系统精通 EXT2 文件系统 熟悉 YAFF 文件系统 了解设备驱动程序液晶LCD 设备驱动精通 USB设备驱动精通 网卡设备驱动精通 嵌入式图形系统MiniGUI精通 QT/Embedded 熟悉 MicroWIN 了解嵌入式数据库系统SQLLite精通 嵌入式应用程序开发网络通讯应用开发精通 数据库存储应用开发 熟悉 多媒体应用开发 熟悉 图形用户界面开发精通 Shell 编程技巧 熟悉 【说明】 精通 ―― 表明对于所学内容和工具的原理进行过深入分析,了解相关内容实现的具体技术细节,并掌握 了相关工具的高级使用技巧。 熟悉 ―― 表明对于所学内容和工具能够融会贯通,掌握相关内容的基本概念,并能够熟练使用相关工具 的常用技巧。 了解 ―― 表明对于所学内容和工具一般了解,能够区别相关内容在概念上的异同,并能够初步使用相关工具。
‘叁’ 单片机 同时处理多件事
单片机是不能同时处理多件事情。如果要想同步处理多件事情,只能是先中断正在做的事情,转移到其它需要做的事情上,等事情处理完毕,或者还是处理到一定程度,再转回之前正在做的事情。
一、关于单片机:
单片机(Microcontrollers)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。
二、单片机的应用分类:
单片机(Microcontrollers)作为计算机发展的一个重要分支领域,根据发展情况,从不同角度,单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。
1、通用型
这是按单片机(Microcontrollers)适用范围来区分的。例如,80C51式通用型单片机,它不是为某种专门用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。
2、总线型
这是按单片机(Microcontrollers)是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、 数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。
3、控制型
这是按照单片机(Microcontrollers)大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。 显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用。
‘肆’ 嵌入式操作系统与底层驱动代码的关系
目前uclinux已不多用。因为ARM9已成为很普遍的东西,所以,主要用linux了。
linux下的编程与windows的编程一样,分应用层和驱动层编程,应用层的编程与windows的程序编程差不多。驱动层则与windows有较大区别。在linux中,一般来说,驱动层的程序会产生一个设备文件,在应用层中就可以通过打开关闭读写这个设备文件来对底层的硬件进行操作。因此,linux下的底层驱动程序又被称为设备驱动程序。驱动程序分几类类型,我们常用的有字符型设备驱动,块设备驱动。你所说的控制管脚电平,中断等功能,都可以在字符型设备驱动中完成。
关于linux驱动程序的编写,请看一下着名的《linux驱动程序 第三版》
‘伍’ uclinux和linux的区别
Linux是一种很受欢迎的操作系统,它与UNIX系统兼容,开放源代码。它原本被设计为桌面系统,现在广泛应用于服务器领域。而更大的影响在于它正逐渐的应用于嵌入式设备。uClinux正是在这种氛围下产生的。在uClinux这个英文单词中u表示Micro,小的意思,C表示Control,控制的意思,所以uClinux就是Micro-Control-Linux,字面上的理解就是"针对微控制领域而设计的Linux系统"。想了解Linux命令可参考下图:
‘陆’ 学嵌入式为什么要学linux 主要用途是什么
事实上,ARM是通常都是用来做比较复杂的系统的,而且一般都是多任务系统的,当任务比较多,程序比较大的时候,只用汇编和C可怕难以胜任,所以我们应该给ARM配一个操作系统,用来管理这些任务,那么对于ARM,我们可以作使用哪些操作系统呢?Windows XP行吗?当然不行,太大了,不适合做嵌入式,微软倒是推出了专门针对嵌入式系统开发的WinCE,可是这可不是免费的,而且不提供源码的,给你就像一个黑夹子,对于一般的嵌入式学习,就不太合适了?那么什么样的操作系统才能用于做嵌入式呢?嵌入式操作系统通常有Vx works 、WinCE 、uC/OS、Linux / ucLinux等。而uC/OS、Linux因为其免费,而且开源,深受学习者和小公司的欢迎。
uC/OS操作系统内核很小,特别适合初学,而且它是占先式内核,是一个实时的操作系统,特别适合实时性要求较高的场合,其内核很小当然其功能当然也就没有linux强大,而且uC/OS的图形用户界面(GUI)还是刚有雏形,没有linux的GUI好,而它的GUI是收费的。这样的话只是linux是最好了,但是linux本身不是实时的操作系统,不适合实时性高的场合,于是ucLinux产生了,ucLinux是一个实时操作系统(RTOS),因此学习ARM+ucLinux的人较多。
所以,如果只搞uc/OS+ARM,那就可以不学linux了,如果想学习ARM+ucLinux,要在ARM上移植linux,那么移植后,这个装有linux的ARM处理器,当然只能运行linux环境下编译出来的应用程序(这里还有一个交叉编译的概念需要正确理解),所以理所当然要学linux。通常小红帽Red Hat Linux 使用比较广泛,那么不能在Windows下开发ARM+ucLinux吗?其实倒是可以在Windows使用虚拟机软件VMware装一个linux。
嵌入式 Linux 最主要的工作是让目标板能启动 Linux 系统,启动 Linux 系统的核心工作就是启动 Linux 内核,启动 Linux 内核的核心工作就是让这个 Linux 内核能支持你这个设备,Linux 内核能支持你这个设备的前提就是 Linux 内核经过你的改进后确实能启动,你改进内核的前提就是你会 Linux 内核。 你要是学嵌入式 WinCE ,你同样要学 WinCE ,和学 Linux 内核的主要学习内容一样。当然针对性不同。
‘柒’ arm7上支持linux的进程线程技术吗
arm7 一般跑的是uclinux, 支持vfork 但不支持fork, 线程支持
‘捌’ 基于linux内核开发设计的操作系统有哪些
目前成型的系统有如下:
手机:Android、ios(只能算半个)
电脑:linux、ubuntu、MAC等
还有诸如:openSUSE、Mint 、Fedora、Debian、Mandriva 、PCLinuxOS、Puppy、Sabayon、MEPIS、CentOS、Arch、Slackware 、FreeBSD、Kubuntu、Damn Small等等就不说了
Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU 工程各种工具和数据库的操作系统。
‘玖’ linux的相关疑问,ARM高手进。
1.ARM据说有裸跑和嵌入式两种工作方式,那区别呢?
========================================================
所谓裸跑就是不带操作系统,把arm当单片机用,实现各种功能,比如网络啊,i2c啊,gpio啊以及其中的中断,都需要通过设置arm寄存器得到实现,这种方式的优点是,速度快,
缺点是:实现复杂功能基本不现实。。。。
所谓另一种工作方式也就是跑操作系统了,主流的嵌入式操作系统有linux,wince,uclinux,vxworks等等,它的作用就是将开发者和底层的硬件尽量隔开,不让你为了什么中断嵌套而伤脑筋,而且实现了对多线程之类的支持,而底层的比如i2c啊网络之类的实现都又驱动完成,
缺点是,速度相对于裸奔慢,但是开发简单,能将大部分的时间投入到开发中,而不是怎么使用arm中。
2.ARM用在嵌入式的话,据说是LINUX系统上,那搞这个开发是不是要把LINUX的底层驱动弄明白?那要多久啊?
=======================================================
这个就不好说了,因为“弄明白”这个东东不好定义的,如果你拥有很扎实的C语言功底,与单片机开发经验的话,大概一个星期可以上手。我大概就用了这么就就开始假如项目开发了。
3。所谓LINUX是开放源代码,我就奇怪。据说windows的源程序有几千万行,LINUX的源代码有多少?这个即使开放了,能看完吗?
==================================================================
呵呵,源码啊,我读过一些,由于能力以及时间问题,想读完其实是很难的,很少有人读完,但是呢,你有了源文件以后你就可以知道linux的某一部分是如何实现的,这样当你的程序出现莫名其妙的问题的时候才好“有据可依”。
4.LINUX系统的底层开发,要多久才能学会啊?
=================================================
同2问题,不好解释,当你功底较好,也就1星期就可以参与项目开发了,然后边做边学,一个项目做完后,这次你提问的问题你自己都会解答了
这里我要解释下什么交功底较好,
也就是说你有丰富的项目开发经验,良好的编程风格,以及出色的解决问题的能力。
5.据说嵌入式的开发爱用LINUX. 但大部分电脑的操作系统是windows啊 ! 那LINUX下的ARM能接在windows系统吗?
==============================================================
嵌入式开发用linux一方面是开源,一方面是不要钱,而大部分电脑是windows的也确实,linux下的arm和windows连接我不是很理解你的意思,连接的方法有很多中啊,但是都要通过协议,即使arm用的是windows的wince那也必须使用协议才能连接,比如串口,tcp/ip(网线),并口,usb协议等,所以接入方面是没有问题的。
6.学这个是不是要学习底层驱动之类的?
=================================================
底层驱动这个东西呢,我是最先学的,学了他让你的视野和事业更开阔,而对于职场来说,底层驱动是很吃香的,而其他的底层开发中还有网络协议比较吃香,而那些只是用来完成逻辑的其他代码,是人都会写,所以工资也是最低的(当然也有例外,假如你是大牛,呵呵)。
‘拾’ skyeye运行uclinux
1:准备合适的操作系统和编译环境
如果你熟悉linux系统,那就跳过此节
如果你机器配置还可以,建议你装个虚拟机,在虚拟机上面安装Linux。
如果你用Windows系统,先安装Cygwin或者mingw。
如果你对上面这些都不是很熟悉,那就搜索一下怎么安装Cygwin/Mingw/Linux。
2:下载skyeye源码包
http://sourceforge.net/project/showfiles.php?group_id=85554
skyeye-1.2.6_rc1.tgz
skyeye-testsuite-1.2.5.tgz
3:在shell下面解压文件
tar xzvf skyeye-1.2.6_rc1.tgz
tar xzvf skyeye-testsuite-1.2.5.tgz
4:编译skyeye
cd skyeye-1.2.6_rc1 && ./configure && make && make install
5:编译内核。
5.1 如果你不知道编译内核,那最快速的方法就是直接运行线程编译好的内核,例如skyeye-testsuite-1.2.5\uClinux\s3c44b0x这里面就有vmlinux的文件,多看看readme
6:运行 skyeye
skyeye -e linux -c skyeye.conf
-e linux表示镜像文件叫Linux
-c skyeye.conf 表示使用skyeye.conf 这个配置文件
如果还不明白可以再上网多搜索一下编译内核。
这些问题很基础,要熟悉Linux很快就能明白。
搞嵌入式不见得都要上板子,而且那样很没有效率。
建议你先跑完上面的流程,然后深入理解各个环节。
有没有没有开发板无所谓,学习态度才是关键,如果楼主能更勤奋、更有钻研精神的话,这些问题很快就能搞定。相反的话即使能跑完,也无法理解,跟别说开发了。