出版时间:2010-11 出版社:电子工业出版社 作者:祁德春 页数:241
Tag标签:无
前言
1.本书编写目的刚参加工作从事嵌入式Linux软件开发,面临的首要问题就是如何快速融入工作并承担研发任务,发现、分析、解决开发中出现的各种具体问题。万事开头难,千头万绪不知从何开始,作者刚参加工作时同样疑惑。如果你也有同感的话,那么请你打开本书,它将带你快速进入工作状态。2.本书内容本书共分9章。第1章简单介绍嵌入式Linux的概念及特点;第2章以图解方式详细介绍如何搭建Linux开发服务器,以及如何解决搭建过程中可能出现的常见问题;第3章简单地介绍Linux开发中主机和开发板上的常用命令并如何用它们来解决实际问题;第4章介绍如何搭建嵌入式Linux开发环境及解决在开发中遇到的常见问题;第5章举例说明如何移植开源代码及其注意事项;第6章介绍shell编程基础知识;第7章用大量例子介绍如何进行网络编程,如何解决网络编程中的常见问题;第8章详细阐述了Linux多线程编程以及如何实现多线程之间的同步和通信;第9章总结开发过程中出现的种种死机及其产生原因。后记中讲述作者从事嵌入式Linux软件开发的经验和教训。3.本书特色本书立足于实际研发,本着帮助Linux新手快速入门的目的,摒弃大而全的写法,以交流探讨的方式,有针对性地讲解开发过程中的常见问题、重点问题和难点问题。本书可以作为计算机、自动化、电子及相关专业学生的参考资料,尤其适合于初入职场从事嵌入式Linux开发的新手。
内容概要
本书介绍了作者初入职场从事嵌入式Linux开发,从不知所措到独立承担项目的过程中所遇到的种种问题,在简要说明原理的同时,还配有完整的实例代码,并对问题进行了详细的分析和解答。书中第一部分简要介绍嵌入式Linux开发基础,重点是第二部分,剖析了常见shell编程、socket编程、多线程编程及同步、多线程通信中的问题,以及常见死机问题等。 本书立足于实际研发,适合于初入职场的软件开发人员,准备从事嵌入式Linux开发的人员,以及计算机、电子相关专业的学生阅读。
书籍目录
第1章 嵌入式Linux基础 1.1 什么是嵌入式Linux 1.2 嵌入式Linux的特点 1.3 嵌入式Linux的应用范围 1.4 嵌入式Linux的开发模式 1.5 嵌入式Linux发展面临的挑战 1.6 嵌入式Linux的发展前景 1.7 嵌入式Linux应用程序开发必备技能 第2章 搭建Linux开发服务器 2.1 Fedora概述 2.2 VMware workstation概述 2.3 Fedora5的安装 2.4 配置linux服务器 2.4.1 怎样开通常用网络服务 2.4.2 ping不通Linux主机怎么办 2.4.3 由telnet连不上Linux主机怎么办 2.4.4 怎样让root用户telnet到主机 2.4.5 怎样配置Samba服务器——创建登录用户 2.4.6 怎样配置Samba服务器 2.4.7 登录主机提示找不到网络路径怎么办 2.4.8 登录主机提示指定的网络名不再可用怎么办 2.4.9 tftp下载主机文件超时怎么办 2.4.10 NFS配置——开启服务并添加共享文件夹 2.4.11 NFS配置——共享目录不能被挂载怎么办 2.4.12 怎样修改File Browser风格——显示地址栏 2.4.13 怎样修改Linux主机的屏幕分辨率 2.4.14 怎样修改Linux主机的网络接入方式 2.4.15 Fedora 5安装完毕以后不能添加/删除软件怎么办 2.4.16 Fedora 5不能在SCSI虚拟硬盘上安装怎么办 第3章 常用Linux命令介绍 3.1 常用命令介绍 3.1.1 文件管理命令 3.1.2 备份压缩 3.1.3 磁盘管理和维护 3.1.4 系统管理和维护 3.1.5 文档搜索和查找 3.1.6 网络相关 3.2 常见问题探讨 3.2.1 cp和scp拷贝丢失符号链接怎么办 3.2.2 fgrep搜索时感觉很慢怎么办 3.2.3 烧写NAND Flash后文件系统校验出错怎么办 3.2.4 怎样在开发板上查看内核版本和硬件平台 3.2.5 怎样查看/设置/删除默认网关 3.2.6 设置默认网关显示网络不可达怎么办 3.2.7 怎样通过命令设置DNS地址 3.2.8 busybox命令date设置时间出错怎么办 3.2.9 busybox命令udhcpc不能设置IP地址怎么办 3.2.10 busybox命令telnetd让其他主机连接失败怎么办 3.2.11 怎样在开发板上格式化U盘并创建文件系统 3.2.12 怎样在开发板上挂载U盘 第4章 搭建嵌入式Linux开发环境 4.1 搭建嵌入式开发环境 4.1.1 搭建交叉编译环境 4.1.2 编译内核 4.1.3 编译标准函数库 4.1.4 编译bootloader 4.1.5 开发编译应用程序 4.1.6 在Linux上开启tftp、nfs、ssh、telnet等服务 4.1.7 使用超级终端远程登录 4.1.8 构建嵌入式Linux根文件系统 4.1.9 制作根文件系统镜像 4.2 常见问题探讨 4.2.1 了解Windows编程 4.2.2 不会写驱动和u-boot怎么办 4.2.3 不会写makefile怎么办 4.2.4 SecureCRT特别配置 4.2.5 Linux内核配置时M不能修改怎么办 4.2.6 开发板上/proc中没有scsi文件夹怎么办 4.2.7 开发板上/proc/bus/usb中没有设备信息怎么办 4.2.8 开发板上/sys为空怎么办 4.2.9 开发板启动时找不到init进程的原因 4.2.10 怎样进行只读文件系统调试 4.2.11 采用NFS调试时出现RPC错误的原因 4.2.12 烧写jffs2镜像之后重启很慢的原因 4.2.13 无法找到"libstdc++.so.6"怎么办 4.2.14 不能执行二进制文件怎么办 4.2.15 errno是否线程安全 4.2.16 注意bootloader传给内核的启动参数 4.2.17 怎样在内核drivers目录下添加模块 4.2.18 怎样实时监测USB等hotplug设备 第5章 如何移植开源代码 5.1 交叉编译开源代码 5.1.1 下载开源代码 5.1.2 在host上运行程序 5.1.3 交叉编译 5.2 在开发板上运行 5.3 开源代码向工程中移植 5.4 常见问题探讨 5.4.1 版本的选择 5.4.2 执行configure脚本失败时怎么办 5.4.3 链接以两个下划线开头的函数显示未定义怎么办 5.4.4 某些源文件不能编译时的解决办法 5.4.5 交叉编译的文件在开发板上的放置位置 5.4.6 在程序中调用交叉编译的程序 5.4.7 移植的程序运行时写文件失败的原因 5.4.8 源码移植时的注意事项 第6章 简单shell编程 6.1 什么是shell 6.2 &命令 6.3 shell输入与输出——echo和管道(|) 6.3.1 echo 6.3.2 管道(|) 6.4 正则表达式 6.5 shell变量——本地变量、环境变量、位置变量参数 6.5.1 本地变量 6.5.2 环境变量 6.5.3 位置变量参数 6.6 引号的使用——双引号、单引号、 反引号、反斜线 6.6.1 双引号 6.6.2 单引号 6.6.3 反引号 6.6.4 反斜线 6.7 条件测试 6.7.1 文件状态测试 6.7.2 逻辑操作符 6.7.3 字符串测试 6.7.4 数值测试 6.8 shell的流控制结构——流控制和循环 6.8.1 流控制 6.8.2 循环 6.9 使用shell函数 6.10 shell编程实践 6.11 常见问题 第7章 socket编程 7.1 常用函数介绍 7.2 编程实例 7.2.1 使用select实现超时连接 7.2.2 非阻塞数据收发操作 7.2.3 简单服务器 7.2.4 加入组播 7.2.5 组播服务器 7.3 常见问题探讨 7.3.1 怎样实现内核级PPP拨号程序 7.3.2 PPPOE拨号一直不成功怎么办 7.3.3 PPPOE拨号成功获取IP地址但不能上网怎么办 7.3.4 给ppp0设置了默认网关仍不能上网怎么办 7.3.5 通过system函数启动PPPOE拨号死机怎么办 7.3.6 非法关机导致pppoe下次连接失败怎么办 7.3.7 PPPOE拨号上网是否要加包过滤 7.3.8 IP地址设置成功后仍ping不通同网段内其他主机怎么办 7.3.9 错误SIOCADDRT: Network is unreachable的原因分析 7.3.10 修改socket接收缓冲区大小的方法 7.3.11 修改内核中IGMP支持版本的方法 7.3.12 错误Too many open files in system的原因分析 7.3.13 接收HTTP或RTSP应答数据时的注意事项 7.3.14 注意select设置超时的方式 7.3.15 域名解析花费时间长的解决办法 7.3.16 非阻塞socket无限等待的解决办法 7.3.17 用setsockopt+SO_SNDTIMEO实现连接超时 7.3.18 调用setsockopt时出现错误No such device的解决办法 7.3.19 断电重启以后连接服务器失败的解决办法 第8章 多线程编程 8.1 线程管理函数 8.2 线程属性操作函数 8.3 实例讲解 8.3.1 创建线程并查看其属性 8.3.2 pthread_exit的错误用法 8.3.3 自封装函数create_thread 8.4 多线程同步 8.4.1 互斥锁(mutex)常用函数介绍 8.4.2互斥锁的两种初始化方式及应用 8.4.3 信号量(semaphore)常用函数介绍 8.4.4 二值信号量应用——互斥锁 8.4.5 多值信号量应用——停车场问题 8.5 多线程通信 8.5.1 通过全局变量通信 8.5.2 系统V消息队列 8.5.3 POSIX消息队列 8.5.4 自封装消息队列 8.6 常见问题探讨 8.6.1 使用多线程的好处 8.6.2 程序运行到pthread相关函数时阻塞怎么办 8.6.3 线程被取消后用ps还能看到其PID怎么办 8.6.4 在嵌入式Linux上是否使用实时优先级 8.6.5 嵌入式Linux线程分离属性的设置 8.6.6 用kill系统调用终止线程的隐患 8.6.7 用pthread_kill终止线程 第9章 常见死机问题探讨 9.1 常见死机及原因分析 9.1.1 打印函数输出格式或者参数顺序不对 9.1.2 除数为0 9.1.3 应用程序链接不匹配的库文件或驱动 9.1.4 操作未初始化的指针 9.1.5 操作空指针 9.1.6 系统内存耗尽 9.1.7 重复释放同一块内存 9.1.8 free释放栈内存 9.1.9 malloc/new返回的地址被修改 9.1.10 内存越界 9.1.11 分配过大的栈内存 9.1.12 分配过大的静态内存 9.1.13 递归调用导致栈内存不够 9.1.14 操作“野指针” 9.1.15 未调用模块的初始化函数 9.1.16 混用名称和功能相近的函数 9.1.17 平台问题 9.1.18 平台编译规则引起的死机 9.1.19 程序编译不完全 9.2 死机调试 9.2.1 gdb远程调试 9.2.2 抓取死机core文件 9.3 死循环 9.3.1 无符号数和0比较作为循环条件 9.3.2 循环退出条件不当 9.3.3 链表操作不当 9.4 关键任务死锁或阻塞 9.4.1 关键任务调用阻塞函数 9.4.2 嵌套调用mutex或semaphore 9.4.3 操作消息队列时无限等待 附录 后记
章节摘录
插图:目前嵌入式Linux正在蓬勃发展,并已形成了很大的市场,除了一些传统的Linux公司,一些专门开发嵌入式Linux的公司也应运而生。但是就技术而言,嵌入式Linux离市场的真正需求还有一定的距离,需要在以下几个方面加强开发:第一,实时性扩充。实时性是嵌入式操作系统的基本要求,由于Linux还不是一个真正的实时操作系统,内核不支持事件优先级和抢占实时特性,所以在开发嵌入式Linux的过程中,首要问题是扩展Linux的实时性。对Linux实时性的扩展可以从两方面进行:向外扩展和向上扩展。向外扩展即从范围上扩展,让实时系统支持的范围更广,支持的设备更多。目前的开发所面向的设备仅限于较简单的有实时要求的串/并口数据采集、浮点数据计算等,而像实时网络这样的高级应用还需进一步发展。向上扩展是扩充Linux内核,从功能上扩充Linux的实时处理和控制系统。如嵌入式系统RTLinux,它的基本原理是将Linux本身的任务及Linux内核本身作为一个优先级最低的任务,而实时任务作为优先级最高的任务,即在实时任务存在的情况下运行实时任务,否则就运行Linux本身的任务。
后记
在写这本书的时候,心情是很矛盾的,说实话,自身的资历与实力还不足以出书,但这四年的软件开发实践,从一个连C语言几乎不懂的软件开发人员成长到今天能够独立承担项目,自觉经历的风风雨雨可以与大家一起交流分享。第一,坚定信念,相信自己。如果你一无所长,任何人都可以打击你,都可以看不起你,但请你看得起自己。你可以什么都不会,也可以什么都不懂,但必须有一颗积极进取,永不服输的心。别人连操作系统、驱动程序、标准库函数都写好了,我们没理由连应用程序都开发不好。一切的问题都不是问题,办法总比问题多,问题就是答案,是问题就能被解决!第二,端正心态,从零开始。学校说明不了问题,学历代表不了水平。工作是人生的又一个新起点,那就让自己从零开始吧。项目需要你做什么你就做什么,不要管在什么平台开发,不要管要你开发什么东西,也不要管你开发的东西有没有“技术含量”。
编辑推荐
《初入职场之嵌入式Linux开发快速上手》:当年初入职场无数冥思苦想九章经验总结诸多收获感想
图书封面
图书标签Tags
无
评论、评分、阅读与下载