描述
开 本: 16开纸 张: 胶版纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787302370833
内容简介
本书结合作者10多年的培训和实践经验,通过简明扼要的语言,以及实用的案例与方法,对嵌入式Linux应用开发中的关键技术点进行了深入浅出的讲解。全书分为基础篇、应用进阶篇和实战提高篇。
本书内容从简单的案例开始,始终保持实用、易懂的风格,每个章节都设置了实践操作案例,能够帮助读者快速掌握嵌入式Linux应用软件的开发技能。
本书主要面向对嵌入式Linux应用软件开发感兴趣的初学者,或需要进一步提升技能的开发者,也可作为高等院校计算机类、电子电气类、控制类专业学生学习嵌入式Linux应用开发的教材。
本书内容从简单的案例开始,始终保持实用、易懂的风格,每个章节都设置了实践操作案例,能够帮助读者快速掌握嵌入式Linux应用软件的开发技能。
本书主要面向对嵌入式Linux应用软件开发感兴趣的初学者,或需要进一步提升技能的开发者,也可作为高等院校计算机类、电子电气类、控制类专业学生学习嵌入式Linux应用开发的教材。
目 录
第1章 体验嵌入式系统的魅力
1.1 嵌入式系统的定义
1.2 嵌入式系统的历史与现状
1.2.1 无操作系统阶段
1.2.2 简单操作系统阶段
1.2.3 实时操作系统阶段
1.2.4 面向Internet阶段
1.3 嵌入式与非嵌入式的区别
1.4 从事嵌入式软件开发的前景
1.4.1 优势
1.4.2 从事嵌入式软件开发的缺点
1.4.3 技术基本要求
1.5 嵌入式系统的体系结构
1.5.1 嵌入式处理器
1.5.2 嵌入式外围设备
1.5.3 嵌入式操作系统
1.5.4 嵌入式应用软件
1
1.7 延伸阅读:嵌入式系统面临的关键问题
1.8 小结
第2章 嵌入式Linux的前世今生
2.1 嵌入式Linux简介
2.1.1 嵌入式Linux的优势
2.1.2 嵌入式Linux面临的挑战
2.1.3 发展前景
2.1.4 A
2.2 嵌入式Linux系统的软件组成
2.2.1 引导加载程序
2.2.2 Linux内核
2.2.3 文件系统
2.2.4 用户应用程序
2.3 嵌入式系统软件研发的关键技术
2.3.1 开发流程
2.3.2 交叉编译和链接
2.3.3 交叉调试
2.3.4 系统测试
2.4 系统启动过程
2.5 延伸阅读:开源、GPL与POSIX简介
2.5.1 开源
2.5.
2.5.3
2.6 小结
第3章 零基础安装虚拟机与Linux操作系统
3.1 VMware Workstation的安装
3.2 配置VMware Workstation并便捷安装Fedo
3.3 配置VMware Workstation手动安装Fedo
3.4 安装Fedo
3.5 VMware Tools的安装
3.6 使用已安装好操作系统的虚拟机
3.7 延伸阅读:打开Fedora 16的root账号
3.8 小结
第4章 快速构建嵌入式Linux开发环境
4.1 安装交叉编译器
4.1.1 安装交叉编译器
4.1.2 建立链接
4.1.3 查看交叉工具是否安装正确
4.2 构建开发板运行所需的环境
4.2.1 编译一级启动文件x-
4.2.2 编译二级启动文件
4.2.3 编译内核
4.2.4 制作文件系统镜像
4.3 更新系统文件
4.3.1 更新文件从SD卡启动
4.3.2 更新文件从NAND Flash启动
4.4 小结
第5章 配置串口通信工具
5.1 配置Windows XP的超级终端
5.2 串口信息的捕获
5.3 在Linux中配置M
5.4 小结
第6章 配置NFS文件系统服务
6.1 查看宿主机上的安装包
6.2 配置网络文件系统
6.3 启动NFS服务
6.3.1 在Fedora 16下面运行service nfs start命令失败
6.3.2 在Fedora 16下面运行service nfs-server start失败
6.4 本机测试
6.5 在开发板上测试
6.5.1 常见的测试过程
6.5.2 NFS无法挂载的问题分析
6.6 小结
第7章 开始编写个程序
7.1 在宿主机上编写个程序
7.2 编写开发板上的上个程序
7.3 小结
第8章 Linux开发入门私房菜
8.1 程序安装目录
8.2 头文件
8.3 库文件
8.4 gcc简介
8.5 make简介
8.6 小结
第9章 Shell:用户与Linux沟通的桥梁
9.1 Shell是如何工作的
9.2 Shell的“兄弟姐妹”
9.3 必须熟悉的Shell命令
9.3.1 命令行
9.3.2 选项和参数
9.3.3 命令行特征
9.4 理解Shell中的特殊字符
9.4.1 通配符
9.4.2 引号
9.4.3 注释符
9.5 畅通交流:标准输入/输出和重定向
9.5.1 标准输入与输出
9.5.2 输入重定向
9.5.3 输出重定向
9.5.4 管道
9.6 命令替换
9.7 实战体验:在Bash中的操作
9.7.1 命令和文件名扩展特性
9.7.2 命令行编辑
9.7.3 命令历史
9.7.4 命令别名
9.8 定制
9.9 小结
第10章 文本编辑利器
10.1 Vi简介
10.1.1 命令行模式
10.1.2 文本输入模式
10.1.3 末行模式
10.1.4 模式之间的切换
10.2 Vi的进入与退出
10.2.1 Vi的进入
10.2.2 退出
10.3 Vi中的行号
10.4 光标移动操作
10.5 按字移动光标
10.5.1 w和W命令
10.5.2 e和E命令
10.5.3 b和B命令
10.6 屏幕滚动
10.6.1 滚屏命令
10.6.2 分页命令
10.6.3 状态命令
10.7 屏幕调零命令
10.8 文本插入操作
10.8.1 插入(Insert)命令
10.8.2 打开(open)命令
10.9 文本修改
10.9.1 文本删除
10.9.2 取消上一命令(
10.9.3 重复命令(
10.10 实现替换功能
10.11 小结
第11章 应知应会的基本函数
11.1 文件操作函数
11.1.1 文件的创建与打开操作
11.1.2 对文件进行读写
11.1.3 文件的关闭操作
11.1.4 改变文件读写偏移位置: ls
11.1.5 实例:文件的打开关闭、读写 与设置文件读写指针
11.1.6 文件描述符和流
11.1.7 文件控制操作函数fc
11.1.8 控制设备文件参数的函数 io
11.1.9 文件的权限修改
11.1.10 文件的属主与组群修改
11.1.11 获得文件的状态
11.1.12 文件的其他操作
11.2 目录操作
11.2.1 创建和删除目录的函数
11.2.2 打开目录
11.2.3 读取目录
11.2.4 关闭目录
11.2.5 改变工作目录的函数
11.2.6 取得当前的工作目录
11.2.7 实例:文件列表程序
11.3 建立临时文件
11.4 获取进程号
11.5 获取节点信息
11.6 小结
第12章 时间问题的处理
12.1 时钟类型
12.1.1 硬件时钟
12.1.2 系统时钟
12.1.3 系统时钟与硬件时钟的关系
12.2 UTC、CST与
12.3 Linux下常用的时间类型
12.3.1 time_t时间类型
12.3.2 struct tm时间类型
12.3.3 struct timeval时间类型
12.3.4 struct timespec时间类型
12.3.5 struct tim
12.3.6 获得自Epoch以来的秒数
12.4 获得与修改系统时间
12.5 时间格式转换
12.5.1 asctime函数
12.5.2 ctime函数
12.5.3 gmtime函数
12.5.4 localtime函数
12.5.5 mktime函数
12.6 使线程睡眠的时间函数
12.6.1 sleep函数
12.6.2 usleep函数
12.6.3 nanosleep函数
12.6.4 示例:为nanosleep()函数指定秒数和纳秒数
12.6.5 alarm函数
12.7 延伸阅读:其他函数
12.8 小结
第13章 简单的网络编程实战
13.1 基础知识
13.1.1 C/S与B/S结构
13.1.2 UDP/TCP协议
13.1.3 什么是S
13.2 UDP套接字编程实例
13.2.1 服务端
13.2.2 客户端
13.2.3 编译
13.2.4 运行结果
13.2.5 使用Wireshark捕获数据包
13.2.6 UDP套接字网络编程涉及的系统调用过程
13.2.7 建立S
13.2.8 配置S
13.2.9 数据传输
13.2.10 延伸阅读:关闭S
13.3 TCP套接字编程实例
13.3.1 服务端
13.3.2 客户端
13.3.3 编译
13.3.4 运行结果
13.3.5 使用Wireshark捕获数据包
13.3.6 TCP套接字网络编程所涉及的系统函数
13.3.7 建立连接
13.3.8 数据传输
13.4 小结
第14章 简单的线程操作实战
14.1 为何嵌入式系统中进程不再是重点
14.1.1 进程与线程
14.1.2 线程的优势
14.1.3 我们的问题
14.1.4 进程通信的统一方式:Socket通信
14.1.5 简单的线程操作
14.2 创建线程
14.3 获得本线程的标识符
14.4 结束线程
14.5 延伸阅读:操作线程共享变量
14.6 小结
第15章 重点剖析:线程同步实例
15.1 互斥锁
15.1.1 再谈线程共享变量的操作
15.1.2 互斥锁的创建
15.1.3 互斥锁的销毁
15.1.4 互斥锁的操作
15.2 读写锁
15.2.1 读写锁实例
15.2.2 读写锁的创建
15.2.3 获取读写锁中的读锁
15.2.4 获取读写锁中的写锁
15.2.5 解除锁定的读写锁
15.2.6 销毁读写锁
15.3 条件变量
15.3.1 忙等待
15.3.2 条件变量
15.3.3 条件变量的创建
15.3.4 条件变量的销毁
15.3.5 条件变量的等待和激发
15.3.6 互斥锁和条件变量的结合使用
15.4 线程死锁
15.5 延伸阅读:解决死锁的方法
15.5.1 解决方法一
15.5.2 解决方法二
15.6 小结
第16章 进阶私房菜:再谈线程
16.1 线程参数的传递
16.1.1 单个参数传递
16.1.2 多个参数传递
16.2 线程私有数据
16.2.1 创建
16.2.2 删除
16.2.3 读写
16.3 修改线程属性
16.3.1 可以修改的线程属性
16.3.2 修改线程参数示例
16.4 延伸阅读:线程池
16.4.1 为什么需要线程池
16.4.2 构建线程池框架
16.4.3 简单的线程池示例
16.5 小结
第17章 进阶私房菜:再谈网络编程
17.1 对SIGPIPE信号的处理
17.1.1 示例1:SIGPIPE信号的默认处理
17.1.2 示例2:重定义SIGPIPE信号的默认动作
17.1.3 示例3:忽略SIGPIPE信号
17.1.4 示例4:直接使用MSG_NOSIGNAL标识
17.2 修改Socket缓冲区的大小
17.2.1 setsockopt函数与getsockopt函数
17.2.2 示例:修改Socket缓冲区的大小
17.3 检测服务器与客户端的连接是否有效
17.4 服务器的多线程处理
17.4.1 客户端
17.4.2 服务器
17.5 延伸阅读:重?
17.5.1 TIME_WAIT的两个作用
17.5.2 如何结束TIME_WAIT状态
17.5.3 实现可立即重启的服务器
17.6 小结
第18章 重点突破:网络编程的字节流处理
18.1 面向字节流的分包问题
18.1.1 数据包的常见结构
18.1.2 线程间数据的交互——环形缓冲区的实现
18.1.3 环形缓冲区
18.1.4 封包与解包
18.1.5 网络整合使用实例
18.1.6 错误数据包的测试
18.2 再谈生产者与消费者的示例
18.3 小结
第19章 嵌入式B/S架构开发要点
19.1 几种嵌入式Web服务器的比较
19.1.1
19.1.2 t
19.1.3 Mini_
19.1.4 Mon
19.1.5 Lig
19.1.6 A
19.1.7 A
19.2 Boa简介
19.3 移植与测试Boa的环境配置
19.4 Boa的移植
19.4.1 下载源代码
19.4.2 编译
19.4.3 安装到开发板的Linux文件系统
19.4.4 配置
19.4.5 测试
19.5 使用
19.5.1 简介
19.5.2 配置目标板文件系统
19.5.3 编写HelloCGI.c程序
19.5.4 交叉编译
19.5.5 测试
19.6 复杂网页测试
19.6.1 设置目标板文件系统/var/www的目录结构
19.6.2 编制index
19.6.3 测试
19.7 小结
第20章 SQLite数据库移植与实战
20.1 SQLite的特性
20.2 SQLite的移植过程
20.2.1 移植的环境
20.2.2 移植步骤
20.3 如何使用Linux C操作S
20.4 数据库的并发访问
20.5 小结
附录A 网络分析工具Wireshark的使用
1.1 嵌入式系统的定义
1.2 嵌入式系统的历史与现状
1.2.1 无操作系统阶段
1.2.2 简单操作系统阶段
1.2.3 实时操作系统阶段
1.2.4 面向Internet阶段
1.3 嵌入式与非嵌入式的区别
1.4 从事嵌入式软件开发的前景
1.4.1 优势
1.4.2 从事嵌入式软件开发的缺点
1.4.3 技术基本要求
1.5 嵌入式系统的体系结构
1.5.1 嵌入式处理器
1.5.2 嵌入式外围设备
1.5.3 嵌入式操作系统
1.5.4 嵌入式应用软件
1
1.7 延伸阅读:嵌入式系统面临的关键问题
1.8 小结
第2章 嵌入式Linux的前世今生
2.1 嵌入式Linux简介
2.1.1 嵌入式Linux的优势
2.1.2 嵌入式Linux面临的挑战
2.1.3 发展前景
2.1.4 A
2.2 嵌入式Linux系统的软件组成
2.2.1 引导加载程序
2.2.2 Linux内核
2.2.3 文件系统
2.2.4 用户应用程序
2.3 嵌入式系统软件研发的关键技术
2.3.1 开发流程
2.3.2 交叉编译和链接
2.3.3 交叉调试
2.3.4 系统测试
2.4 系统启动过程
2.5 延伸阅读:开源、GPL与POSIX简介
2.5.1 开源
2.5.
2.5.3
2.6 小结
第3章 零基础安装虚拟机与Linux操作系统
3.1 VMware Workstation的安装
3.2 配置VMware Workstation并便捷安装Fedo
3.3 配置VMware Workstation手动安装Fedo
3.4 安装Fedo
3.5 VMware Tools的安装
3.6 使用已安装好操作系统的虚拟机
3.7 延伸阅读:打开Fedora 16的root账号
3.8 小结
第4章 快速构建嵌入式Linux开发环境
4.1 安装交叉编译器
4.1.1 安装交叉编译器
4.1.2 建立链接
4.1.3 查看交叉工具是否安装正确
4.2 构建开发板运行所需的环境
4.2.1 编译一级启动文件x-
4.2.2 编译二级启动文件
4.2.3 编译内核
4.2.4 制作文件系统镜像
4.3 更新系统文件
4.3.1 更新文件从SD卡启动
4.3.2 更新文件从NAND Flash启动
4.4 小结
第5章 配置串口通信工具
5.1 配置Windows XP的超级终端
5.2 串口信息的捕获
5.3 在Linux中配置M
5.4 小结
第6章 配置NFS文件系统服务
6.1 查看宿主机上的安装包
6.2 配置网络文件系统
6.3 启动NFS服务
6.3.1 在Fedora 16下面运行service nfs start命令失败
6.3.2 在Fedora 16下面运行service nfs-server start失败
6.4 本机测试
6.5 在开发板上测试
6.5.1 常见的测试过程
6.5.2 NFS无法挂载的问题分析
6.6 小结
第7章 开始编写个程序
7.1 在宿主机上编写个程序
7.2 编写开发板上的上个程序
7.3 小结
第8章 Linux开发入门私房菜
8.1 程序安装目录
8.2 头文件
8.3 库文件
8.4 gcc简介
8.5 make简介
8.6 小结
第9章 Shell:用户与Linux沟通的桥梁
9.1 Shell是如何工作的
9.2 Shell的“兄弟姐妹”
9.3 必须熟悉的Shell命令
9.3.1 命令行
9.3.2 选项和参数
9.3.3 命令行特征
9.4 理解Shell中的特殊字符
9.4.1 通配符
9.4.2 引号
9.4.3 注释符
9.5 畅通交流:标准输入/输出和重定向
9.5.1 标准输入与输出
9.5.2 输入重定向
9.5.3 输出重定向
9.5.4 管道
9.6 命令替换
9.7 实战体验:在Bash中的操作
9.7.1 命令和文件名扩展特性
9.7.2 命令行编辑
9.7.3 命令历史
9.7.4 命令别名
9.8 定制
9.9 小结
第10章 文本编辑利器
10.1 Vi简介
10.1.1 命令行模式
10.1.2 文本输入模式
10.1.3 末行模式
10.1.4 模式之间的切换
10.2 Vi的进入与退出
10.2.1 Vi的进入
10.2.2 退出
10.3 Vi中的行号
10.4 光标移动操作
10.5 按字移动光标
10.5.1 w和W命令
10.5.2 e和E命令
10.5.3 b和B命令
10.6 屏幕滚动
10.6.1 滚屏命令
10.6.2 分页命令
10.6.3 状态命令
10.7 屏幕调零命令
10.8 文本插入操作
10.8.1 插入(Insert)命令
10.8.2 打开(open)命令
10.9 文本修改
10.9.1 文本删除
10.9.2 取消上一命令(
10.9.3 重复命令(
10.10 实现替换功能
10.11 小结
第11章 应知应会的基本函数
11.1 文件操作函数
11.1.1 文件的创建与打开操作
11.1.2 对文件进行读写
11.1.3 文件的关闭操作
11.1.4 改变文件读写偏移位置: ls
11.1.5 实例:文件的打开关闭、读写 与设置文件读写指针
11.1.6 文件描述符和流
11.1.7 文件控制操作函数fc
11.1.8 控制设备文件参数的函数 io
11.1.9 文件的权限修改
11.1.10 文件的属主与组群修改
11.1.11 获得文件的状态
11.1.12 文件的其他操作
11.2 目录操作
11.2.1 创建和删除目录的函数
11.2.2 打开目录
11.2.3 读取目录
11.2.4 关闭目录
11.2.5 改变工作目录的函数
11.2.6 取得当前的工作目录
11.2.7 实例:文件列表程序
11.3 建立临时文件
11.4 获取进程号
11.5 获取节点信息
11.6 小结
第12章 时间问题的处理
12.1 时钟类型
12.1.1 硬件时钟
12.1.2 系统时钟
12.1.3 系统时钟与硬件时钟的关系
12.2 UTC、CST与
12.3 Linux下常用的时间类型
12.3.1 time_t时间类型
12.3.2 struct tm时间类型
12.3.3 struct timeval时间类型
12.3.4 struct timespec时间类型
12.3.5 struct tim
12.3.6 获得自Epoch以来的秒数
12.4 获得与修改系统时间
12.5 时间格式转换
12.5.1 asctime函数
12.5.2 ctime函数
12.5.3 gmtime函数
12.5.4 localtime函数
12.5.5 mktime函数
12.6 使线程睡眠的时间函数
12.6.1 sleep函数
12.6.2 usleep函数
12.6.3 nanosleep函数
12.6.4 示例:为nanosleep()函数指定秒数和纳秒数
12.6.5 alarm函数
12.7 延伸阅读:其他函数
12.8 小结
第13章 简单的网络编程实战
13.1 基础知识
13.1.1 C/S与B/S结构
13.1.2 UDP/TCP协议
13.1.3 什么是S
13.2 UDP套接字编程实例
13.2.1 服务端
13.2.2 客户端
13.2.3 编译
13.2.4 运行结果
13.2.5 使用Wireshark捕获数据包
13.2.6 UDP套接字网络编程涉及的系统调用过程
13.2.7 建立S
13.2.8 配置S
13.2.9 数据传输
13.2.10 延伸阅读:关闭S
13.3 TCP套接字编程实例
13.3.1 服务端
13.3.2 客户端
13.3.3 编译
13.3.4 运行结果
13.3.5 使用Wireshark捕获数据包
13.3.6 TCP套接字网络编程所涉及的系统函数
13.3.7 建立连接
13.3.8 数据传输
13.4 小结
第14章 简单的线程操作实战
14.1 为何嵌入式系统中进程不再是重点
14.1.1 进程与线程
14.1.2 线程的优势
14.1.3 我们的问题
14.1.4 进程通信的统一方式:Socket通信
14.1.5 简单的线程操作
14.2 创建线程
14.3 获得本线程的标识符
14.4 结束线程
14.5 延伸阅读:操作线程共享变量
14.6 小结
第15章 重点剖析:线程同步实例
15.1 互斥锁
15.1.1 再谈线程共享变量的操作
15.1.2 互斥锁的创建
15.1.3 互斥锁的销毁
15.1.4 互斥锁的操作
15.2 读写锁
15.2.1 读写锁实例
15.2.2 读写锁的创建
15.2.3 获取读写锁中的读锁
15.2.4 获取读写锁中的写锁
15.2.5 解除锁定的读写锁
15.2.6 销毁读写锁
15.3 条件变量
15.3.1 忙等待
15.3.2 条件变量
15.3.3 条件变量的创建
15.3.4 条件变量的销毁
15.3.5 条件变量的等待和激发
15.3.6 互斥锁和条件变量的结合使用
15.4 线程死锁
15.5 延伸阅读:解决死锁的方法
15.5.1 解决方法一
15.5.2 解决方法二
15.6 小结
第16章 进阶私房菜:再谈线程
16.1 线程参数的传递
16.1.1 单个参数传递
16.1.2 多个参数传递
16.2 线程私有数据
16.2.1 创建
16.2.2 删除
16.2.3 读写
16.3 修改线程属性
16.3.1 可以修改的线程属性
16.3.2 修改线程参数示例
16.4 延伸阅读:线程池
16.4.1 为什么需要线程池
16.4.2 构建线程池框架
16.4.3 简单的线程池示例
16.5 小结
第17章 进阶私房菜:再谈网络编程
17.1 对SIGPIPE信号的处理
17.1.1 示例1:SIGPIPE信号的默认处理
17.1.2 示例2:重定义SIGPIPE信号的默认动作
17.1.3 示例3:忽略SIGPIPE信号
17.1.4 示例4:直接使用MSG_NOSIGNAL标识
17.2 修改Socket缓冲区的大小
17.2.1 setsockopt函数与getsockopt函数
17.2.2 示例:修改Socket缓冲区的大小
17.3 检测服务器与客户端的连接是否有效
17.4 服务器的多线程处理
17.4.1 客户端
17.4.2 服务器
17.5 延伸阅读:重?
17.5.1 TIME_WAIT的两个作用
17.5.2 如何结束TIME_WAIT状态
17.5.3 实现可立即重启的服务器
17.6 小结
第18章 重点突破:网络编程的字节流处理
18.1 面向字节流的分包问题
18.1.1 数据包的常见结构
18.1.2 线程间数据的交互——环形缓冲区的实现
18.1.3 环形缓冲区
18.1.4 封包与解包
18.1.5 网络整合使用实例
18.1.6 错误数据包的测试
18.2 再谈生产者与消费者的示例
18.3 小结
第19章 嵌入式B/S架构开发要点
19.1 几种嵌入式Web服务器的比较
19.1.1
19.1.2 t
19.1.3 Mini_
19.1.4 Mon
19.1.5 Lig
19.1.6 A
19.1.7 A
19.2 Boa简介
19.3 移植与测试Boa的环境配置
19.4 Boa的移植
19.4.1 下载源代码
19.4.2 编译
19.4.3 安装到开发板的Linux文件系统
19.4.4 配置
19.4.5 测试
19.5 使用
19.5.1 简介
19.5.2 配置目标板文件系统
19.5.3 编写HelloCGI.c程序
19.5.4 交叉编译
19.5.5 测试
19.6 复杂网页测试
19.6.1 设置目标板文件系统/var/www的目录结构
19.6.2 编制index
19.6.3 测试
19.7 小结
第20章 SQLite数据库移植与实战
20.1 SQLite的特性
20.2 SQLite的移植过程
20.2.1 移植的环境
20.2.2 移植步骤
20.3 如何使用Linux C操作S
20.4 数据库的并发访问
20.5 小结
附录A 网络分析工具Wireshark的使用
在线试读
2.1嵌入式Linux简介
就像一个绩优股一样,Linux之所以能在嵌入式系统上取得如此辉煌的成果,与其自身的优良特性是分不开的。嵌入式Linux的特点是版权免费,有全世界的自由软件开发者提供技术支持,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,有许多公开的代码可以参考和移植,使得应用产品开发周期短,新产品上市迅速。
2.1.1嵌入式Linux的优势
嵌入式Linux既继承了Linux的优良特性,又具有嵌入式操作系统的特性,下面简要描述嵌入式Linux的主要特性。
1.开放源码,软件丰富
Linux是开放源代码的自由操作系统,不存在黑箱技术,它为用户提供了限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件为原型,在其上进行二次开发。Linux是免费的操作系统,在价格上极具竞争力,对商业产品来说尤具优势。
2.跨平台,广泛的硬件支持
Linux适应于多种CPU和多种硬件平台,能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,是一个跨平台的系统。Linux目前已经成功移植到多种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。
3.内核高效稳定
Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分为进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。
……
就像一个绩优股一样,Linux之所以能在嵌入式系统上取得如此辉煌的成果,与其自身的优良特性是分不开的。嵌入式Linux的特点是版权免费,有全世界的自由软件开发者提供技术支持,而且性能优异,软件移植容易,代码开放,有许多应用软件支持,有许多公开的代码可以参考和移植,使得应用产品开发周期短,新产品上市迅速。
2.1.1嵌入式Linux的优势
嵌入式Linux既继承了Linux的优良特性,又具有嵌入式操作系统的特性,下面简要描述嵌入式Linux的主要特性。
1.开放源码,软件丰富
Linux是开放源代码的自由操作系统,不存在黑箱技术,它为用户提供了限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件为原型,在其上进行二次开发。Linux是免费的操作系统,在价格上极具竞争力,对商业产品来说尤具优势。
2.跨平台,广泛的硬件支持
Linux适应于多种CPU和多种硬件平台,能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,是一个跨平台的系统。Linux目前已经成功移植到多种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。
3.内核高效稳定
Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分为进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。
……
评论
还没有评论。