linux开发实例?linux可视化软件开发
嵌入式Linux应用层开发有哪些实例
一:C语言嵌入式Linux工程师的学习需要具备一定的C语言基础,C语言是嵌入式领域最重要也是最主要的编程语言,通过大量编程实例重点理解C语言的基础编程以及高级编程知识。包括:基本数据类型、数组、指针、结构体、链表、文件操作、队列、栈等。
二:Linux基础 Linux操作系统的概念、安装方法,详细了解Linux下的目录结构、基本命令、编辑器VI,编译器GCC,调试器GDB和 Make项目管理工具, Shell Makefile脚本编写等知识,嵌入式开发环境的搭建。
三:Linux系统编程重点学习标准I/O库,Linux多任务编程中的多进程和多线程,以及进程间通信(pipe、FIFO、消息队列、共享内存、signal、信号量等),同步与互斥对共享资源访问控制等重要知识,主要提升对Linux应用开发的理解和代码调试的能力。
四:Linux网络编程计算机网络在嵌入式Linux系统应用开发过程中使用非常广泛,通过Linux网络发展、TCP/IP协议、socket编程、TCP网络编程、UDP网络编程、Web编程开发等方面入手,全面了解Linux网络应用程序开发。重点学习网络编程相关API,熟练掌握TCP协议服务器的编程方法和并发服务器的实现,了解HTTP协议及其实现方法,熟悉UDP广播、多播的原理及编程方法,掌握混合C/S架构网络通信系统的设计,熟悉HTML,Javascript等Web编程技术及实现方法。
五:数据结构与算法数据结构及算法在嵌入式底层驱动、通信协议、及各种引擎开发中会得到大量应用,对其掌握的好坏直接影响程序的效率、简洁及健壮性。此阶段的学习要重点理解数据结构与算法的基础内容,包括顺序表、链表、队列、栈、树、图、哈希表、各种查找排序算法等应用及其C语言实现过程。
六:C++、QT C++是Linux应用开发主要语言之一,本阶段重点掌握面向对象编程的基本思想以及C++的重要内容。图形界面编程是嵌入式开发中非常重要的一个环节。由于QT具有跨平台、面向对象、丰富API、支持2D/3D渲染、支持XML、多国语等强大功能,在嵌入式领域的GUI开发中得到了广范的应用,在本阶段通过基于QT图形库的学习使学员可以熟练编写GUI程序,并移植QT应用程序到Cortex-A8平台。包括IDE使用、QT部件及布局管理器、信息与槽机制的应用、鼠标、键盘及绘图事件处理及文件处理的应用。
七:Cortex A8、Linux平台开发通过基于ARM Cortex-A8处理s5pv210了解芯片手册的基本阅读技巧,掌握s5pv210系统资源、时钟控制器、电源管理、异常中断控制器、nand flash控制器等模块,为底层平台搭建做好准备。Linux平台包括内核裁减、内核移植、交叉编译、GNU工具使用、内核调试、Bootloader介绍、制作与原理分析、根文件系统制作以及向内核中添加自己的模块,并在s5pv210实验平台上运行自己制作的Linux系统,集成部署Linux系统整个流程。同时了解Android操作系统开发流程。Android系统是基于Linux平台的开源操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的真正开放和完整的移动软件,目前它的应用不再局限于移动终端,还包括数据电视、机顶盒、PDA等消费类电子产品。
八:驱动开发驱动程序设计是嵌入式Linux开发工作中重要的一部分,也是比较困难的一部分。本阶段的学习要熟悉Linux的内核机制、驱动程序与用户级应用程序的接口,掌握系统对设备的并发操作。熟悉所开发硬件的工作原理,具备ARM硬件接口的基础知识,熟悉ARM Cortex-A8处理器s5pv210各资源、掌握Linux设备驱动原理框架,熟悉工程中常见Linux高级字符设备、块设备、网络设备、USB设备等驱动开发,在工作中能独立胜任底层驱动开发。
以上就是列出的关于一名合格嵌入式Linux开发工程师所必学的理论知识,其实,作为一个嵌入式开发人员,专业知识和项目经验同样重要,所以在我们的理论学习中也要有一定的项目实践,锻炼自己的项目开发能力。
Linux驱动程序开发实例的目录
前言
第1章 Linux设备驱动程序模型 1
1.1设备驱动程序基础 1
1.1.1驱动程序的概念 1
1.1.2驱动程序的加载方式 2
1.1.3编写可加载模块 3
1.1.4带参数的可加载模块 5
1.1.5设备驱动程序的分类 6
1.2字符设备驱动程序原理 7
1.2.1 file_operations结构 7
1.2.2使用register_chrdev注册字符
设备 9
1.2.3使用cdev_add注册字符设备 11
1.2.4字符设备的读写 13
1.2.5 ioctl接口 14
1.2.6 seek接口 16
1.2.7 poll接口 18
1.2.8异步通知 22
1.3 proc文件系统 24
1.3.1 proc文件系统概述 24
1.3.2 seq_file机制 25
1.3.3使用proc文件系统 27
1.4块设备驱动程序 32
1.4.1 Linux块设备驱动程序原理 32
1.4.2简单的块设备驱动程序实例 35
1.5网络设备驱动程序 39
1.5.1网络设备的特殊性 39
1.5.2 sk_buff结构 40
1.5.3 Linux网络设备驱动程序架构 42
1.5.4虚拟网络设备驱动程序实例 46
1.6 Linux 2.6设备管理机制 50
1.6.1 kobject和kset 50
1.6.2 sysfs文件系统 51
1.6.3设备模型层次 52
1.6.4 platform的概念 54
第2章 Linux内核同步机制 58
2.1锁机制 58
2.1.1自旋锁 58
2.1.2读写锁 60
2.1.3 RCU 61
2.2互斥 64
2.2.1原子操作 64
2.2.2信号量 65
2.2.3读写信号量 67
2.3等待队列 68
2.3.1等待队列原理 68
2.3.2阻塞式I/O实例 68
2.3.3完成事件 70
2.4关闭中断 71
第3章内存管理与链表 72
3.1物理地址和虚拟地址 72
3.2内存分配与释放 72
3.3 IO端口到虚拟地址的映射 73
3.3.1静态映射 73
3.3.2动态映射 75
3.4内核空间到用户空间的映射 76
3.4.1内核空间到用户空间的地址
映射原理 76
3.4.2 mmap地址映射实例 78
3.5内核链表 80
3.5.1 Linux内核中的链表 80
3.5.2内核链表实例 81
第4章延迟处理 83
4.1内核线程 83
4.2软中断机制 85
4.2.1软中断原理 85
4.2.2 tasklet 87
4.3工作队列 89
4.3.1工作队列原理 89
4.3.2工作队列实例 91
4.4内核时间 92
4.4.1 Linux中的时间概念 92
4.4.2 Linux中的延迟 93
4.4.3内核定时器 93
第5章简单设备驱动程序 96
5.1寄存器访问 96
5.1.1 S3C6410地址映射 96
5.1.2 S3C6410看门狗驱动程序实例 98
5.1.3 S3C6410蜂鸣器驱动程序实例 102
5.2电平控制 107
5.2.1 S3C6410 LED驱动程序实例 107
5.2.2扫描型S3C6410按键驱动
程序实例 109
5.3时序产生 112
5.3.1时序图原理 112
5.3.2 AT24C02芯片原理 112
5.3.3 AT24C02驱动程序开发实例 115
5.4硬中断处理 123
5.4.1硬中断处理原理 123
5.4.2中断型S3C6410按键驱动
程序实例 127
5.5 Linux I/O端口控制 132
5.5.1 Linux I/O端口读写 132
5.5.2在应用层访问Linux I/O
端口 133
5.5.3/dev/port设备 134
第6章深入Linux内核 135
6.1嵌入式Linux系统构成 135
6.2 Linux内核导读 136
6.2.1 Linux内核组成 136
6.2.2 Linux的代码结构 137
6.2.3内核Makefile 138
6.2.4 S3C6410硬件初始化 139
6.3 Linux文件系统 141
6.3.1虚拟文件系统 141
6.3.2根文件系统 143
6.3.3文件系统加载 143
6.3.4 ext3文件系统 145
6.4 Flash文件系统 145
6.4.1 MTD设备 145
6.4.2 MTD字符设备 148
6.4.3 MTD块设备 150
6.4.4 cramfs文件系统 153
6.4.5 JFFS2文件系统 153
6.4.6 YAFFS文件系统 155
6.4.7文件系统总结 156
6.5 Linux内核移植 156
6.5.1体系配置 156
6.5.2添加yaffs2 157
6.5.3 Nand flash驱动程序移植 157
6.5.4配置启动参数 159
6.5.5移植RTC驱动程序 160
6.6根文件系统制作 162
6.6.1 Busybox 162
6.6.2 shell基础 165
6.6.3根文件系统构建实例 166
6.7 udev模型 167
6.7.1 udev模型原理 167
6.7.2 mdev的使用 167
第7章 I2C总线驱动程序 169
7.1 Linux的I2C驱动程序架构 169
7.1.1 I2C适配器 169
7.1.2 I2C算法 170
7.1.3 I2C驱动程序结构 170
7.1.4 I2C从设备 171
7.1.5 i2c-dev设备层 171
7.2 Linux I2C驱动程序开发 174
7.2.1 S3C2410X的I2C控制器 174
7.2.2 S3C2410X的I2C驱动程序
分析 175
7.3 S3C2410的I2C访问实例 182
7.4 I2C客户端驱动程序 185
第8章 TTY与串口驱动程序 190
8.1 TTY概念 190
8.2 Linux TTY驱动程序体系 190
8.2.1 TTY驱动程序调用关系 190
8.2.2 TTY驱动程序原理 191
8.3线路规程 194
8.4串口驱动程序与TTY 196
8.4.1串口设备驱动程序原理 196
8.4.2 S3C6410的串口驱动程序
实例 199
8.5 TTY应用层 202
第9章网络设备驱动程序 205
9.1 DM9000网卡驱动程序
开发 205
9.1.1 DM9000原理 205
9.1.2 DM9000X驱动程序分析 207
9.1.3 DM9000网口驱动程序移植 215
9.2 NFS根文件系统搭建 219
9.2.1主机配置 219
9.2.2 NFS根文件系统搭建实例 220
9.3 netlink Socket 224
9.3.1 netlink机制 224
9.3.2 netlink应用层编程 228
9.3.3 netlink驱动程序实例 229
第10章 framebuffer驱动程序 232
10.1 Linux framebuffer驱动
程序原理 232
10.1.1 framebuffer核心数据结构 232
10.1.2 framebuffer操作接口 234
10.1.3 framebuffer驱动程序的文件
接口 236
10.1.4 framebuffer驱动程序框架 236
10.2 S3C6410显示控制器 238
10.3 S3C6410 LCD驱动程序实例 243
10.4 framebuffer应用层 250
10.5 Qt4界面系统移植 251
第11章输入子系统驱动程序 253
11.1 Linux输入子系统概述 253
11.1.1 input_dev结构 253
11.1.2输入事件 255
11.2 input_handler 256
11.2.1 Input Handler层 256
11.2.2常用的Input Handler 259
11.3输入设备应用层 261
11.4键盘输入设备驱动程序
实例 262
11.5 event接口 267
11.6触摸屏驱动程序实例 270
11.6.1 S3C6410触摸屏控制器 270
11.6.2 S3C6410触摸屏驱动程序
设计 273
11.7触摸屏校准 282
11.7.1触摸屏校准原理 282
11.7.2利用TSLIB库校准触摸屏 282
第12章 USB驱动程序 284
12.1 USB体系概述 284
12.1.1 USB系统组成 284
12.1.2 USB主机 284
12.1.3 USB设备逻辑层次 285
12.2 Linux USB驱动程序体系 287
12.2.1 USB总体结构 287
12.2.2 USB设备驱动程序 287
12.2.3主机控制器驱动程序 288
12.2.4 USB请求块urb 289
12.2.5 USB请求块的填充 291
12.3 S3C6410 USB主机控制器
驱动程序 292
12.3.1 USB主机控制器驱动程序
分析 292
12.3.2 S3C6410 USB驱动程序
加载 294
12.4 USB键盘设备驱动程序
分析 296
12.5 USB Gadget驱动程序 301
12.5.1 Linux USB Gadget驱动程序 301
12.5.2 Linux USB Gadget驱动程序
实例 302
第13章音频设备驱动程序 303
13.1 ALSA音频体系 303
13.2 ALSA驱动层API 304
13.2.1声卡和设备管理 304
13.2.2 PCM API 304
13.2.3控制与混音API 305
13.2.4 AC97 API 306
13.2.5 SOC层驱动 307
13.3 ALSA驱动程序实例 308
13.3.1 S3C6410的AC97控制
单元 308
13.3.2 S3C6410声卡电路原理 309
13.3.3 S3C6410的数字音频接口 310
13.3.4 wm9713的数字音频接口 313
13.4 ALSA音频编程接口 316
13.4.1 ALSA PCM接口实例 316
13.4.2 ALSA MIDI接口实例 320
13.4.3 ALSA mixer接口实例 321
13.4.4 ALSA timer接口实例 322
第14章 video4linux2视频
驱动程序 327
14.1 video4linux2驱动程序
架构 327
14.1.1 video4linux2驱动程序的
注册 327
14.1.2 v4l2_fops接口 331
14.1.3常用的结构 332
14.1.4 video4linux2的ioctl函数 333
14.2 S3C6410摄像头驱动程序
分析 333
14.2.1电路原理 333
14.2.2驱动程序分析 334
14.3 video4linux2应用层实例 339
第15章 SD卡驱动程序 346
15.1 Linux SD卡驱动程序体系 346
15.1.1 SD卡电路原理 346
15.1.2 MMC卡驱动程序架构 347
15.1.3 MMC卡驱动程序相关
结构 347
15.1.4 MMC卡块设备驱动程序 350
15.1.5 SD卡主机控制器接口驱动
程序 356
15.2 S3C6410 SD卡控制器驱动
程序分析 360
15.2.1电路原理 360
15.2.2 S3C6410 SDHCI驱动
程序原理 360
15.2.3 SD卡的加载实例 364
参考文献 366
Linux Shell 教程——想玩转linux就请一直看下去
Shell是一个用 C语言编写的程序,它是用户使用 Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。
Shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson的 sh是第一种 Unix Shell,Windows Explorer是一个典型的图形界面 Shell。
Shell在线工具
Shell脚本(shell script),是一种为 shell编写的脚本程序。
业界所说的 shell通常都是指 shell脚本,但读者朋友要知道,shell和 shell script是两个不同的概念。
由于习惯的原因,简洁起见,本文出现的"shell编程"都是指 shell脚本编程,不是指开发 shell自身。
Shell编程跟 JavaScript、php编程一样,只要有一个能编写代码的文本编辑器和一个能解释执行的脚本解释器就可以了。
Linux的 Shell种类众多,常见的有:
在一般情况下,人们并不区分 Bourne Shell和 Bourne Again Shell,所以,像#!/bin/sh,它同样也可以改为#!/bin/bash。
#!告诉系统其后路径所指定的程序即是解释此脚本文件的 Shell程序。
打开文本编辑器(可以使用 vi/vim命令来创建文件),新建一个文件 test.sh,扩展名为 sh(sh代表shell),扩展名并不影响脚本执行,见名知意就好,如果你用 php写 shell脚本,扩展名就用 php好了。
输入一些代码,第一行一般是这样:
#!/bin/bash
echo"Hello World!"
运行实例»
#!是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行,即使用哪一种 Shell。
echo命令用于向窗口输出文本。
1、作为可执行程序
将上面的代码保存为 test.sh,并 cd到相应目录:
注意,一定要写成./test.sh,而不是 test.sh,运行其它二进制的程序也一样,直接写 test.sh,linux系统会去 PATH里寻找有没有叫 test.sh的,而只有/bin,/sbin,/usr/bin,/usr/sbin等在 PATH里,你的当前目录通常不在 PATH里,所以写成 test.sh是会找不到命令的,要用./test.sh告诉系统说,就在当前目录找。
2、作为解释器参数
这种运行方式是,直接运行解释器,其参数就是 shell脚本的文件名,如:
这种方式运行的脚本,不需要在第一行指定解释器信息,写了也没用。