嵌入式Linux系统应用及项目实践

《嵌入式Linux系统应用及项目实践》是2012年12月出版的图书,作者是丰海。

嵌入式Linux系统应用及项目实践基本信息

书名 嵌入式Linux系统应用及项目实践 作者 丰海
ISBN 978-7-111-39684-0 定价 36.8元

嵌入式Linux系统应用及项目实践造价信息

市场价 信息价 询价
材料名称 规格/型号 市场价
(除税)
工程建议价
(除税)
行情 品牌 单位 税率 供应商 报价日期
图方便负压污水收集系统 依据实际项目进行配置(含真空井、真空管道、动力源站) 查看价格 查看价格

图方便

13% 图方便(苏州)环保科技有限公司
装配一体化污水处理设备 PKY-DIAB-600,Ф8000mm×7000mm,材质碳钢防腐,处理规模600m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-1000,Ф10400mm×7000mm,材质碳钢防腐,处理规模1000m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-2000,Ф14300mm×7000mm,材质碳钢防腐,处理规模2000m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-3000,Ф18000mm×7000mm,材质碳钢防腐,处理规模3000m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-10000,Ф32500mm×7000mm,材质碳钢防腐,处理规模10000m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-600,Ф8000mm×7000mm,材质304不锈钢,处理规模600m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
装配一体化污水处理设备 PKY-DIAB-2000,Ф14300mm×7000mm,材质304不锈钢,处理规模2000m3/d 查看价格 查看价格

鹏凯

13% 鹏凯环境科技股份有限公司
材料名称 规格/型号 除税
信息价
含税
信息价
行情 品牌 单位 税率 地区/时间
GRG高级装饰系统 厚15-20(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年3季度信息价
GRG高级装饰系统 厚10-12(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年2季度信息价
GRG高级装饰系统 厚25-35(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年2季度信息价
GRG高级装饰系统 厚10-12(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年1季度信息价
GRG高级装饰系统 厚25-35(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年1季度信息价
烟感系统 查看价格 查看价格

湛江市2005年2月信息价
GRG高级装饰系统 厚25-35(双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2016年3季度信息价
GRG高级装饰系统 厚10-12 (双曲、异形、无缝拼接) 查看价格 查看价格

湛江市2015年4季度信息价
材料名称 规格/需求量 报价数 最新报价
(元)
供应商 报价地区 最新报价时间
视频综合平台1、采用嵌入式架构,专用Linux系统,使用DSP解码.为? 视频综合平台1、采用嵌入式架构,专用Linux系统,使用DSP解码.为?|1台 3 查看价格 浙江宇视科技有限公司 全国   2020-11-13
Linux系统 Linux Enterprise 12.0(2cpu)一年服务,盒包|15套 1 查看价格 上海倾菲电子科技有限公司 全国   2018-05-17
操作系统(Linux) Linux Enterprise 12.0(2cpu)一年服务,盒包|2套 1 查看价格 上海倾菲电子科技有限公司 全国   2018-05-17
嵌入式录播系统 软件内嵌于录播系统主机,运行于嵌入式Linux操作系统环境,支持B/S管理.支持对课堂或培训课堂录制的控制和管理,具有录制资源模式、录制电源模式、录制暂停、选择录制格式等功能.支持添加录制片头、添加|1套 3 查看价格 广州市迪士普音响科技有限公司 全国   2019-09-03
人员主被动定位通信应用系统 人员主被动定位通信应用系统|1套 1 查看价格 南京埃尔乔亿自控设备有限公司 四川   2021-06-16
操作系统(Linux) Linux Enterprise 12.0(2cpu)一年服务,盒包|4套 1 查看价格 上海倾菲电子科技有限公司 全国   2018-05-17
嵌入式地毯 1、嵌入式地毯2、地毯成份::手工簇绒3、做法参考物料表"SF-1061"对应附属大样图4、满足图纸要求等一切所需|112.97m² 3 查看价格 山东东升地毯集团有限公司 广东   2022-03-19
嵌入式硬盘录像 嵌入式硬盘录像8路|8247套 1 查看价格 广州市帝星信息科技有限公司 广东  广州市 2015-05-14

嵌入式Linux系统应用及项目实践常见问题

  • 嵌入式系统的发展及应用

    纵观嵌入式系统的发展历程,大致经历了以下四个阶段: 无操作系统阶段 嵌入式系统最初的应用是基于单片机的,大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、等武...

  • linux嵌入式开发板 买哪种的比较好 我是一个初学者

    买arm11内核的吧,6410芯片,听说arm9要停产了。                                                       ———答案来自希赛教育Linux...

  • 安装双系统win7linux双系统桌面实现?

    可以直接到网上下载源文件来安装的,1.进入“安装类型”界面,如果它显示的是:“The computer currently has no deteted operating system”的话,接着看...

嵌入式Linux系统应用及项目实践文献

嵌入式Linux系统应用及项目实践第7章_GPIO接口控制LED灯 嵌入式Linux系统应用及项目实践第7章_GPIO接口控制LED灯

格式:pdf

大小:2.0MB

页数: 10页

评分: 4.4

嵌入式Linux系统应用及项目实践第7章_GPIO接口控制LED灯

立即下载
嵌入式linux的LED实验 嵌入式linux的LED实验

格式:pdf

大小:2.0MB

页数: 9页

评分: 4.4

嵌入式linux的LED实验

立即下载

嵌入式学习是一个循序渐进的过程,如果是希望向嵌入式软件方向发展的话,目前最常见的是嵌入式Linux方向,关注这个方向,大概分3个阶段:

1、嵌入式Linux上层应用,包括QT的GUI开发

2、嵌入式Linux系统开发

3、嵌入式Linux驱动

Linux是开源免费的,而且其源代码是开放的,更加适合学习嵌入式。

(1) C语言是所有编程语言中的强者,因此必须非常熟练的掌握。

(2)Linux操作系统就是用C语言编写的,所以也应该先学习下Linux方面的编程,只有会应用了,才能近一步去了解其内核的精髓。

(4) 了解ARM的架构,原理,以及其汇编指令,我们在嵌入式开发中,一般很少去写汇编,但是最起码的要求是能够看懂arm汇编。

(5) 系统移植的时候,就需要你从最下层的bootloader开始,然后内核移植,文件系统移植等。

(6) 驱动开发

linux驱动程序设计既是个极富有挑战性的领域,又是一个博大精深的内容。

以上是大概的框架,

推荐学习平台:

iTOP-4412开发板涵盖嵌入式技术热点,支持linux,android,QT,Ubuntu系统

核心板参数

尺寸:50mm*60mm

高度:连同连接器在内0.26cm

CPU:Exynos4412,四核Cortex-A9,主频为1.4GHz-1.6GHz

内存:1GB 双通道 DDR3(2GB 可选)

存储4GB EMMC(16GB 可选)

电源管理:低功耗动态三星S5M8767电源管理,最优架构!

工作电压:2.65V--5.5V (推荐4.0V)

系统支持:Linux-QT/Android4.2/Ubuntu操作系统

USB HOST:板载USB3503,引出高性能HSIC,实现2路USB HOST输出

引角扩展:引出脚多达320个,满足用户各类扩展需求

运行温度:-25度至+80度区间,设备工作正常,运行良好!

底板参数

尺寸:110mm*190mm

SWITCH:电源接口

RESET:1个复位按键

POWER:电直流电源输入接口,5V/2A电源输入

TF Card:1个标准TF卡接口

USB Host:2路USB Host,支持USB2.0协议

USB OTG:1路USB OTG 2.0

以太网口:10M/100M自适应网口

PHONE:支持耳机输出

MIC:支持MIC输入

串口:2路串口

A/D:1路

User Key:5个功能按键

DIP SWITCH:1个

GPIO:20PIN(电源和地)

CAMERA接口:1个(可支持200万和500万摄像头)

WIFI接口:1个

HDMI接口:标准HDMI v1.4,1080p高清分辨率输出

LCD接口:共3个,2个LVDS接口,1个RGB接口

LCD电源开关:1个

MIPI接口:1个

实时时钟:内部实时时钟,带有后备锂电池座,断电后系统时间不丢失

BUZZER:1个蜂鸣器

JTAG接口:1个

串口、矩阵键盘、GPS接口:1个

Linux系统中有关/dev/null和/dev/zero文件说明

提示:这个题目完全可以作为一个面试题考考运维的应聘者:

面试题:请解释Linux中/dev/null和/dev/zero两个文件的作用和区别。

在类Unix操作系统中,设备节点并不一定要对应物理设备。没有这种对应关系的设备被称之为伪设备。操作系统运用了它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/dev/urandom、/dev/tty等。

先检查下/dev/null和/dev/zero两个文件的属性:

[root@oldboy ~]# ls -l/dev/null /dev/zero

crw-rw-rw-. 1 root root 1, 3Jul 15 00:11 /dev/null

crw-rw-rw-. 1 root root 1, 5Jul 15 00:11 /dev/zero

提示:从文件属性可以看出这两个文件都是字符设备文件。

1、/dev/null

1)/dev/null介绍

大家都知道宇宙中“太阳黑洞”吧,所有的天体(含地球)一旦进入了太阳黑洞都会消失的无影无踪。这里的/dev/null就是Linux系统中的"黑洞"。

在类Unix系统中,/dev/null(空设备文件或黑洞文件)是一个特殊的设备文件,所有写入其中的数据,都会被丢弃的无影无踪,/dev/null通常被用于丢弃不需要的数据输出,或作为用于输入流的空文件。这些操作通常由重定向完成。

2)/dev/null实践

范例1-1:清空文件。

[root@oldboy ~]# cp/etc/hosts{,.ori} #<==备份。

[root@oldboy ~]# cat /dev/null>/etc/hosts #<==将读取黑洞设备写入到/etc/hosts,表示清空hosts文件。

[root@oldboy ~]# cat/etc/hosts #<==果然没了。使用上述备份恢复回来。

范例1-2:将无用的输出流写入到黑洞丢弃。

当取一个地址响应头的第一行时,加上管道就会出现下面的特殊结果:

[root@oldboy ~]# curl -Iwww.oldboyedu.com|head -1

% Total % Received % Xferd AverageSpeed Time Time Time Current

Dload Upload Total Spent Left Speed

0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0

HTTP/1.1 200 OK

执行上述命令时,会凭空多出来的几行无用信息,此时就可以使用将错误信息定向到黑洞(2>/dev/null)的方式丢弃无用信息。

[root@oldboy ~]# curl -Iwww.oldboyedu.com 2>/dev/null|head -1 #<==将错误信息定向到黑洞。

HTTP/1.1 200 OK

当然了curl命令也提供了实现参数,这里暂且不多表。

[root@oldboy ~]# curl -I -s www.oldboyedu.com|head-1

HTTP/1.1 200 OK

范例1-3:将定时任务脚本结尾加上>/dev/null 2>&1

在书写定时任务总,规范的写法就是将所有定时任务脚本结尾加上>/dev/null 2>&1,让所有的输出流(包括错误的和正确的)都定向到空设备丢弃。

[root@oldboy ~]# crontab -l

#time sync by oldboy at2010-2-1

*/5 * * * * /usr/sbin/ntpdatetime.windows.com >/dev/null 2>&1

#bak all db

00 01 * * * /bin/sh/server/s/mysqlbak.sh >/dev/null 2>&1

2、/dev/zero

1) /dev/zero介绍

和/dev/null类似,/dev/zero也是一个特殊的字符设备文件,当我们使用或读取它的时候,它会提供无限连续不断的空的数据流(特殊的数据格式流)。

/dev/zero文件的常见应用场景有二:

a./dev/zero文件覆盖其他文件信息。

b.产生指定大小的空文件,例如:交换文件、模拟虚拟文件系统等。

2)/dev/zero实践

范例1-5:产生指定大小的空文件。

[root@oldboy ~]# dd if=/dev/zeroof=test.data bs=1M count=2 #<==生成块大小1M,含有2个块的文件。

2+0 records in

2+0 records out

2097152 bytes (2.1 MB) copied,0.00279345 s, 751 MB/s

[root@oldboy ~]# ls -lhtest.data

-rw-r--r--. 1 root root 2.0MJul 15 20:20 test.data #<==一共2M大小。

[root@oldboy ~]# filetest.data

test.data: data #<==特殊的数据文件格式。

提示:在使用dd命令产生空文件时常用/dev/zero作为字符流的源。

范例1-4:利用/dev/zero文件覆盖其他文件信息

[root@oldboy ~]# echo oldboy>new.txt #<==生成一个新文件写入oldboy字符串。

[root@oldboy ~]# ddif=/dev/zero of=new.txt bs=1M count=10 #<==用空的字符流覆盖存在的new.txt文件。

10+0 records in

10+0 records out

10485760 bytes (10 MB) copied,0.0475368 s, 221 MB/s

[root@oldboy ~]# cat new.txt #<==数据丢失了。

更多干货请关注老男孩公众号

Linux 调度器对比

BFS vs CFS,设计上的不同 白天 Con Kolivas 在医院里当麻醉师,为人们解除痛苦,业余的时候借 Linux 解除自己的痛苦。额,Kolivas 学习 Linux 并不是为了解决痛苦,我臆测而已。但据 Kolivas 自述,他接触 Linux 内核时连 C 语言也没有学习过。。。这个事实证明,语言只是一项工具,对问题本质的深入理解才是写程序的关键。可能还有执着,CFS 和 RSDL 之争导致 Kolivas 离开 Linux 社区,此去经年,当 Kolivas 再次开始看内核代码的时候,他立即发现 CFS 存在以下几个设计上的问题:

CFS 的目标是支持从桌面到高端服务器的所有应用场景,这种大而全的设计思路导致其必须做一些实现上的折中,此外,那些只有在高端机器中才需要的特性将引入不必要的复杂代码。

其次,为了维护多 CPU 上的公平性,CFS 采用了负载平衡机制,Kolivas 认为,这些复杂代码抵消了 per cpu queue 曾带来的好处。

最后,主流内核的 CFS 还是对睡眠进程存在一些偏好,这意味着"不公平"。

设计目标不同

在现实中,调度算法类似一个处境尴尬的主妇,满足孩子对晚餐的要求便有可能伤害到老人的食欲。Linux 内核一直试图做出一道让全家老少都喜欢的菜,在这方面,CFS 已经做的很好。但一道能被所有人接受的菜,或许就意味着稍许平淡。而 BFS 只打算满足一种口味,以便将这种口味发展到极限。

根据 Linux Magazine的说法,Con Kolivas是看到了下面这则来自 xkcd 的漫画而开始思考 BFS 的。

事情源于一些 Linux 用户,他们发现 Linux 虽然号称能够充分发挥 4096 颗 CPU 系统的计算能力,但在普通的 laptop 上却无法流畅地播放 Youtube 视频。

这让人们开始思考,对于 Desktop 环境来讲,CFS 哪些复杂的特性究竟是否还有意义?人们是否有必要在自己的个人电脑中使用一个支持 4096 个 CPU 的调度器?

BFS 正是对这种质疑的自然反应。它不打算支持 4096 个 CPU 的庞然大物,BFS 的目标是普通人使用的桌面电脑。此外,BFS 还删除了那些只有在服务器上才需要的特性。比如,BFS 抛弃了 CFS 的组调度特性,类似 CGROUP 这样的特性对于普通的桌面用户是多余的技术。

这很容易理解:在只有一个 CPU 的系统中,谁还会设计多个 CGroup,哪里还能用到 NUMA domain等概念呢?

此外 BFS 使用单一的 run queue,不再需要复杂的负载均衡机制。由于不再有 CGROUP 概念,也不再需要 Group 间的负载均衡。

这些简单的裁剪使得 BFS 的代码极大地简化,简化的代码意味着执行一次调度所需要的指令数减少了,相应的 footprint 自然也减少了。

当然简化代码只是一个显而易见的方面,更重要的是,这种理念的不同会对最终的调度器实现产生更加深远的影响,这实在是难以尽述。

多队列 vs 单一队列

​在 Linux 内核进入 2.6 时,调度器采用 per cpu run queue 从而克服了单一 run queue 的局限。在多 CPU 系统中,单一 run queue 意味着 run queue 成为了系统的瓶颈,因为在同一时刻,一个 CPU 访问 run queue 时,其他的 CPU 即使空闲也必须等待。当使用 per CPU 的 run queue 之后,每个 CPU 不必再使用大锁,从而能够并行地处理调度。

但很多事情都不像第一眼看上去那样简单。

Kolivas 发现,采用 per cpu run queue 所带来的好处会被追求公平性的 load balance 代码所抵消。在目前的 CFS 调度器中,每颗 CPU 只维护本地 run queue 中所有进程的公平性,为了实现跨 CPU 的调度公平性,CFS 必须定时进行 load balance,将一些进程从繁忙的 CPU 的 run queue 中移到其他空闲的 run queue 中。

这个 load balance 的过程需要获得其他 run queue 的锁,这种操作降低了多运行队列带来的并行性。

并且在复杂情况下,这种因 load balance 而引入的 footprint 将非常可观。

当然,load balance 引入的加锁操作依然比全局锁的代价要低,这种代价差异随着 CPU 个数的增加而更加显著。但请您注意,BFS 并不打算为那些拥有 1024 个 CPU 的系统工作,假若系统中的 CPU 个数有限时,多 run queue 的优势便不明显了。

而 BFS 采用单一队列之后,每一个需要调度的新进程都可以在全局范围内查找最合适的 CPU,而无需 CFS 那样等待 load balance 代码来决定,这减少了多 CPU 之间裁决的延迟,最终的结果是更小的调度延迟。

向前看还是向后看?

多年来 Kolivas 一直关注着 Linux 在 desktop 上的表现。对于 desktop 的用户,最注重的不是系统的吞吐量,而是交互性程序的流畅体验。从 SD 开始,Kolivas 就告诉内核黑客们,完全公平能够从根本上保证交互性。他始终坚持一个基本观点:调度器应该 forward look only。决不要去考虑一个进程的过去。

CFS 却偏偏要考虑进程的过去。2.6.23 的时候,CFS 记录并使用 sleep time。之后不久,在 2.6.24 发布的时候,CFS 合并了"Real Fair Scheduler",删除了 sleep time。因此在 2.6.24 之后的内核中,CFS 终于也不再考虑进程过去的睡眠时间。

但 CFS 还是保留了 sleeper fairness 的思想,当进程 wakeup 的时候,在 place_entity() 函数中,CFS 将对 sleeper 进行奖励,以便其能尽快得到 CPU。这个策略是非常微妙的,我们在 2.1 节中详细介绍了 sleeper fairness 的演进过程。假如您花些时间回头再看看,就会发现 sleeper fairness 曾造成怎样严重的延迟问题。虽然 Ingo 自称 Gentle fairness 解决了延迟问题,但从代码上看,Gentle Fairness 只是对 sleeper 的奖励减半而已。因此我们可以说,CFS 依然对 Sleeper 进程进行奖励,这代表着一种偏好,一种"不公平"。而这,正是 BFS 所反对的。

BFS 中,当一个进程 wakeup 时,调度器将根据进程的 deadline 来进行选择(关于 deadline 本文将在第 4 章中详细描述),其结果是,更早睡眠的进程能更快地得到调度;CFS 的 sleeper fairness 则意味着要根据 wakeup 的时间来选择下一个被调度的进程,更早 wakeup 的进程会更快得到调度。

这种不同究竟会对桌面应用造成何种影响尚没有理论依据可以参考。但我个人认为,BFS 的策略更加合理。

您现在可能已经读得有些烦躁了 ( 这些英文加中文的说些啥啊 ),所以我还是尽快介绍一下 BFS 的实现细节吧。然后或许您会理解我,有些词还是不翻译更好。

嵌入式Linux系统应用及项目实践相关推荐
  • 相关百科
  • 相关知识
  • 相关专栏