您好,欢迎来到华拓科技网。
搜索
您的当前位置:首页嵌入式程序设计实验报告

嵌入式程序设计实验报告

来源:华拓科技网


实验一 开发环境的搭建与配置

【实验目的】

1) 熟悉嵌入式Linux开发平台。

2) 掌握嵌入式Linux开发平台的开发环境搭建与配置。 3) 了解minicom配置串口通信参数的过程。 4) 了解嵌入式Linux的启动过程。

5) 掌握程序交叉编译运行及调试的一般方法。

【实验内容】

1) 连接实验开发板与宿主机。

2) 在虚拟机中的CentOS(宿主机)搭建开发环境。 3) 在宿主机中配置minicom。 4) 分析嵌入式Linux的启动过程。

5) 在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,然后传输到目标机上运行。 6) 在宿主机上编写简单的C语言程序并用交叉编译工具进行编译,用gdbserver进行远程调试。

【实验步骤】

连接实验开发板,对虚拟机进行设置

1) 首先把实验开发板打开,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实验

开发板的开关按钮)。

2) 在桌面上点击打开vmware 软件,选择“编辑虚拟机设置”,如下图所示:

- 1 -

图1

3) 进入虚拟机配置界面后把网络连接方式设置为“桥接方式”,如图2所示:

图2

- 2 -

4) 添加串口,如下图所示:

图3

5) 完成串口的添加后,选择“OK”,完成对虚拟机的设置。如下图所示:

- 3 -

图4

6) 选择虚拟机的“Edit”、“Virtual Network Editor...”,如下图所示:

- 4 -

图5

7) 进入虚拟机网络参数设置界面后对VMnet0进行设置(注意这里桥接的网卡应选择与实验开

发板相连接的那块儿网卡),然后点击“Apply”、“OK”如下图所示:

- 5 -

图6

8) 上述设置完成后启动CentOS(CentOS的用户名为“root”,密码为“xidianembed”)。 工具链的配置

1) 在CentOS的根目录下创建一个名为“EELiod”的目录,把实验中要用到的文件(主要是一

些rpm包)拷贝到该目录下。(可以用U盘、WinSCP等工具进行,此处不再做详细说明)。 2) 交叉编译工具链位于/opt/buildroot-2011.02/output/host/usr目录下,进入工具链的bin目录下,

可以看到一些编译工具,这些工具将会在之后的交叉编译过程中使用到。

- 6 -

图7

3) 为了之后在任何目录下都能够使用上述目录下的命令,必须对系统环境变量PATH进行设置。

这个可以通过修改/etc/profile文件来实现。在设置之前,先用echo命令查看一下PATH的当前值,如果已经添加了交叉编译工具链的路径,就不用再修改PATH的值了。如果要修改,则可以用vi编辑器打开/etc/profile文件。

图8

4) 在

/etc/profile

export

“PATH=$PATH:/opt/buildroot-2011.02/output/host/usr/bin”,然后保存并退出该文件。

图9

5) 使用source命令来使路径生效。

图10

6) 使用echo $PATH查看环境变量PATH的当前值,看修改是否生效。

7) 使用which命令来查看路径是否生效,并查看arm-linux-gcc命令的基本信息以验证此命令是

否可用。

- 7 -

图11

注意:如果路径没有生效,则可以重启一下CentOS系统,再使用which命令来查看路径是否生效。该交叉编译工具链的版本为4.2.4。 tftp的安装

1) 进入/root/EELiod/rpm目录下。

图12

2) 安装tftp协议并设置tftp协议的配置文件(这里只用把配置好的文件替换默认配置文件就行

了)。

图13

如果在安装tftp时有“error:Failed dependencies”的错误提示,请先安装“xinetd-2.3.14-16.e15.i386.rpm”,然后再安装tftp。

3) 用cat命令查看tftp的配置文件。

- 8 -

图14

4) 在根目录下创建tftpboot文件夹,作为tftp服务器端的默认根目录(对应于配置文件中的

“server_args”字段),用户可以把需要向实验开发板传输的文件放到“/tftpboot”目录下。

图15

5) 重新执行xinetd守护进程,使配置生效。

图16

进入minicom软件,配置串口通信参数

1) 在终端中输入minicom –s,进入minicom配置界面。

图17

在如下图当中,选择

Serial Port Setup 菜单选项,进行串口配置。

- 9 -

图18

有关串口通信选项的含义:

\"Filenames and paths\":选择需要传输的文件和路径 \"File transfer protocols\":选择传输文件的通信协议 \"Serial port setup\":设置串口通信参数

\"Save setup as dfl\":将设置好的各项参数保存为dfl

\"Save setup as\":将设置好的各项参数保存为自定义的文件名 \"Exit\":退出返回到minicom设置好后的终端

\"Exit from Minicom\":从minicom命令中退出返回Linux终端

将光标移到\"Serial port setup\",按回车键会弹出串口通信参数的配置菜单。 2) 串口通信口的选择:(A - Serial Device)

按\"A\"键把光标移动到Serial Device。如果串口线连在PC机的串口1上,则把Serial device设置为/dev/ttyS0。如果连在串口2上,则把Serial device设置为/dev/ttyS1,然后按下回车键。

- 10 -

图19

3) 串口参数的设置(E - Bps/Par/Bits)

按\"E\"键来设置通信波特率、数据位、奇偶校验位和停止位(可以通过按下不同的键来设置通信参数)。分别按\"I\"、\"V\"、\"L\"、\"W\"键把波特率设为115200,数据位设为8,奇偶校验位设为无,停止位设为1。设置完后按\"Esc\"。

- 11 -

图20

4) 数据流的控制选择(F - Hardware Flow Control、G - Software Flow Control)

按\"F\"键可以完成硬件流控制切换,即完成\"Yes\"与\"No\"之间的切换。按\"G\"键完成软件流控制切换,即完成\"Yes\"与\"No\"之间的切换。下图显示的是串口配置好的后完整信息。

- 12 -

图21

5) 配置完成后,按下“Esc”键,将会出现下图的配置菜单。选择“Save setup as dfl”按ENTER

键来保存,当配置保存后,按下“Esc”键完成设置。

图22

- 13 -

6) 配置完成后单击“Esc”退出配置界面,进入minicom的初始界面,如下图所示:

图23

实验开发板的启动

1) 拨动实验开发板的电源开关,启动目标板。

图24

注意在启动的过程中可能出现如下提示信息,这些信息不影响系统的启动。

- 14 -

图25

2) 当启动停止后直接按“Enter”即可进入系统。

图26

嵌入式Linux系统的启动过程分析

1) 启动Bootloader

Bootloader是嵌入式系统的引导加载程序,它是系统上电后运行的第一段程序,其作用类似于PC机上的BIOS。在本系统中这段程序的起始地址为0x00000000。Bootloader在完成初始化RAM、初始化串口、检测处理器类型、设置Linux启动参数后,开始调用Linux内核。本系统Linux内核镜像zImage放在Flash中,Bootloader首先把它拷贝到RAM中,然后跳转到RAM中对zImage进行解压缩。解压缩后启动内核。

2) 加载内核

内核启动后先进行一系列与内核相关的初始化,然后调用第一个用户进程——init进程并等待用户进程的执行。具体的过程如下:

进行与体系结构相关的第一个初始化工作,首先通过检测出来的处理器类型进行处理器内核的初始化,然后进行内存结构的初始化,最后开启MMU,创建内核页表,映射所有的物理内存和IO空间;

创建异常向量表和初始化中断处理函数; 初始化系统核心进程调度器和时钟中断处理机制;

- 15 -

初始化串口控制台,在minicom中看到的系统启动过程中的信息都是通过串口输出的; 创建和初始化系统cache,为各种内存调用机制提供缓存,包括动态内存分配、虚拟文件系统及页缓存;

初始化内存管理,检测内存大小及被内核占用的内存情况; 初始化系统的进程间通信机制(IPC); 创建init进程,结束内核的启动。 3) 执行init进程。

内核被加载后,第一个运行的程序便是/sbin/init,init进程是所有进程的发起者和控制者,它的进程号是1。init进程首先读取/etc/inittab文件,并依据此文件来进行初始化工作(首先进行一系列的硬件初始化,然后通过命令行传递过来的参数挂载根文件系统。最后执行一些其它的进程)。下面是/etc/inittab文件的内容。

- 16 -

图27

init配置文件每行的基本格式为“id:runlevel_ignored:action:process”,其中某些部分可以为空。各部分的具体内容如下:

id:指定启动进程的控制终端,如果所启动的进程并不是可以交互的shell,应该会有个控制终端(在PC机上该字段表示配置行的惟一标识)。

runlevel_ignored:该字段是忽略掉的,配置inittab时空着它就行了(在PC机上该字段用来配置所启动进程适用的系统运行级别)。

action:下面是对几种行为的描述。 行为 sysinit respawn askfirst 描述 为init提供初始化命令脚本的路径 每当相应的进程终止时,重新启动该进程。 类似respawn,主要用途是减少系统上执行的终端应用程序的数量。它将会促使init在控制台上显示“Please press Enter to active this console”的信息,并在重新启动之前等待用户按下“Enter”键 ctrlaltdel shutdown 当用户按下【Ctrl+Alt+Del】时执行相应的进程 当系统关机时,执行相应的进程 process:process为init执行的进程。

- 17 -

4) 执行/bin/login程序。

有些嵌入式系统在init进程执行完后会执行/bin/login。login程序会提示使用者输入账号及密码,接着编码并确认密码的正确性,如果账号与密码相符,则为使用者初始化环境,并将控制权交给shell,即等待用户登录。

本系统在执行完init进程后直接开始执行/bin/sh,进入shell交互程序(跳过了执行/bin/login这一步)。这个可以通过图27中的语句“ttyS0::askfirst:-bin/sh”来说明。 程序的交叉编译及运行

1) 用ifconfig命令把目标机的IP设置为192.168.0.5(如果宿主机上的IP地址不是192.168.0.1,

则用同样的方法设置宿主机的IP)。然后用ping命令测试目标机与宿主机的网络连通性。

图28

2) 在宿主机的/root/Work目录下用vi命令创建一个文件helloworkd.c,编辑后退出并保存。

- 18 -

图29

3) 用arm-linux-gcc命令对helloworld.c进行编译。然后用file命令查看新生成的文件helloworld

的信息。最后看helloworld能否正常运行。

图30

4) 用arm-linux-gcc编译生成的文件只能在嵌入式系统中运行,下面用scp命令把文件helloworld

拷贝到目标机的/root目录下,然后运行该文件,查看运行结果。

用scp命令可实现文件传输,它有多种格式,下面只列出其中的两个,分别用来把文件从远程复制到本地和从本地复制到远程。

scp remote_username@remote_ip:remote_file local_folder scp local_file remote_username@remote_ip:remote_folder

在第一次使用scp命令时会提示“Do you want to continue connecting?(y/n)”,当输入正确的密码(宿主机root用户的密码为“xidianembed”),连接成功后就可以直接进行文件拷贝了。以后再使用scp进行文件拷贝时,连接已经存在,只用输入宿主机密码就可以进行文件拷贝了。

- 19 -

图31

gdbserver远程调试

1) 在宿主机的/root/Work目录下用vi命令创建文件arm_error.c,编辑后保存并退出。

图32

2) 使用arm-linux-gcc命令编译arm_error.c。注意这里要加上参数“-g”,它表示附加调试信息,

不加的话后面将无法进行调试。

图33

3) 用scp命令把arm_error拷贝到目标机的/root目录下。

- 20 -

图34

4) 在目标机的/root目录下运行arm_error,查看运行结果。

图35

5) 在目标机上启动gdbserver。

图36

6) 在宿主机上启动arm-linux-gdb,show命令查看一下solib-search-path是否已经配置,如果没有

则通过set命令进行配置。然后通过target remote命令连接到目标机的1234端口。

图37

7) 下面开始对arm_error进行调试,用list命令列出源程序,用break命令添加断点,然后用continue

- 21 -

命令继续运行程序(目标机中已经启动了arm_error,该程序被gdbserver阻塞)。

图38

8) 用next命令进行单步调试。

图39

在调试的过程中,很容易发现问题出在“p[0] = ‘e’;”语句上。因对一个字符串常量进行修改而发生了段错误。

9) 查看目标机上的显示信息。

图40

- 22 -

实验二 并发Web服务器的实现

【实验目的】

1) 熟悉Linux网络编程。 2) 了解Web服务器原理。

3) 掌握嵌入式Linux多进程、多线程、I/O多路复用三种方式并发服务器的实现。

【实验内容】

1) 用多进程实现Web服务器。 2) 用多线程实现Web服务器。

3) 用I/O多路复用方式实现Web服务器。

【实验步骤】

环境配置

1) 打开实验开发板,用网线和串口线连接宿主机,并连接电源(注意这时不要拨动实

验开发板的开关按钮)。

2) 启动虚拟机中的Linux系统,在终端中运行minicom命令,启动minicom软件。

图1

3) 拨动实验开发板的电源开关,启动目标机,进入嵌入式Linux系统。

图2

- 23 -

4) 用ifconfig命令把目标机的IP设置为192.168.0.5(如果宿主机上的IP地址不是

192.168.0.1,则用同样的方法设置宿主机的IP)。然后用ping命令测试目标机与宿主机的网络连通性。

图3

5) 把程序源代码文件拷贝到宿主机的mnt/nfs/web目录下或者直接在此目录下创建并

编辑源代码文件,结果如下。

图4

实现多进程Web服务器

1) 用arm-linux-gcc命令编译源程序,得到可执行程序web_server_process。

图5

2) 用vi文本编译器创建文件index.html,用于测试Web服务器。

- 24 -

图6

3) 编辑文件index.html,然后保存并退出vi编辑器。

图7

4) 在/mnt/nfs/web目录下创建子目录cgi-bin,并用vi文本编辑器在cgi-bin目录下创

建文件hello.cgi,用于测试Web服务器。

图8

5) 编辑文件hello.cgi,然后保存并退出vi编辑器。

- 25 -

图9

6) 用ls命令可以看到root用户对文件hello.cgi没有执行权限,通过chmod命令来修

改hello.cgi的权限,使它称为可执行文件。

图10

7) 用命令service启动宿主机上的nfs服务,并用exportfs命令查看nfs的共享目录(这

里用到了实验一中的NFS配置,结果如图11所示)。然后在目标机上挂载nfs(如图12所示,在挂载之前需要先关闭宿主机的防火墙)。

图11

- 26 -

图12

8) 在目标机中运行web_server_process。

图13

9) 打开宿主机的浏览器,输入http://192.168.0.5/file,查看执行结果。

图14

10) 在宿主机的浏览器中输入http://192.168.0.5,查看执行结果。

图15

11) 在宿主机的浏览器中输入http://192.168.0.5/index.html,查看执行结果。

- 27 -

图16

12) 在宿主机的浏览器中输入http://192.168.0.5/cgi-bin/hello.cgi,查看执行结果。

图17

13) 在宿主机的浏览器中输入http://192.168.0.5/web_server_process.c,查看执行结果。

图18

实现多线程Web服务器

1) 用arm-linux-gcc命令编译源程序,得到可执行程序web_server_thread。

图19

- 28 -

2) 在目标机中运行web_server_thread。

图20

3) 在宿主机的浏览器中输入http://192.168.0.5,查看执行结果。

图21

4) 在宿主机的浏览器中输入http://192.168.0.5/cgi-bin/hello.cgi,查看执行结果。

图22

5) 在宿主机的浏览器中输入http://192.168.0.5/web_server_thread.c,查看执行结果。

- 29 -

图23

实现I/O多路复用方式的Web服务器

1) 用arm-linux-gcc命令编译源程序,得到可执行程序web_server_select。

图24

2) 在目标机中运行web_server_select。

图25

3) 在宿主机的浏览器中输入http://192.168.0.5,查看执行结果。

图26

- 30 -

4) 在宿主机的浏览器中输入http://192.168.0.5/cgo-bin/hello.cgi,查看执行结果。

图27

5) 在宿主机的浏览器中输入http://192.168.0.5/web_server_select.c,查看执行结果。

图28

- 31 -

实验三 嵌入式Linux驱动(1)

【实验目的】

1) 熟悉嵌入式Linux驱动程序编写框架。

2) 了解七段数码管驱动程序的工作原理,熟练掌握该驱动程序在嵌入式开发平台的

移植和注册使用。

【实验内容】

1) 学习Linux驱动源代码,分析代码中各个函数模块的功能作用。 2) 在宿主机上交叉编译七段数码管驱动程序,然后移植到目标机上。 3) 在目标机上注册驱动程序,验证驱动的功能。

【实验步骤】

了解七段数码管工作原理

七段数码管是显示数字的电子元件,因为借助七个发光二极管以不同组合来显示数字,所以称为七段数码管(如图1)。七段数码管分为共阴极和共阳极,共阳极的七段数码管的正极(或者阳极)为八个发光二极管的共有正极,其他接点为发光二极管的负极(或者阴极),使用者只需要把正极接电,不同的负极接地就可以控制七段数码管显示不同的数字。共阴极的七段数码管与共阳极的只是接电的接法相反而已。

图1

- 32 -

开发板七段数码管电路介绍

开发板上有四个七段共阴数码管,2个一组,第一组七段数码管使用系统LED_CS2作为其位选使能信号,两个数码管的段选信号分别使用数据总线的D0~D7位和D8~D15位,如图2所示。

图2

第二组七段数码管使用系统LED_CS3作为其位选使能信号,两个数码管的段选信号分别使用数据总线的D0~D7位和D8~D15位,如图3所示。

图3

分析可知,对七段数码管的操作主要是对其位选和段选信号的控制。其

- 33 -

中位选信号决定显示哪个七段数码管,段选信号决定其显示的字型信息(共阴极七段数码管段选控制信息如表1),这也是驱动程序和硬件关联的主要部分。

字型 0 1 2 3 4 5 6 7 8 9 A B C D E F D7 Dp 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 D6 G 1 0 1 1 1 1 1 0 1 1 1 1 0 1 1 1 D5 F 1 0 0 0 1 1 1 0 1 1 1 1 1 0 1 1 D4 E 1 0 1 0 0 0 1 0 1 0 1 1 1 1 1 1 表1

七段数码管驱动的交叉编译

1) 进入目录/root/Backup/source下,解压缩驱动源代码到指定路径。

D3 D 1 0 1 1 0 1 1 0 1 1 0 1 1 1 1 0 D2 C 1 1 0 1 1 1 1 1 1 1 1 1 0 1 0 0 D1 B 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 D0 A 1 0 1 1 0 1 1 1 1 1 1 0 1 0 1 1 编码 0X3F 0X06 0X5B 0X4F 0X66 0X6D 0X7D 0X07 0X7F 0X6F 0X77 0X7C 0X39 0X5E 0X79 0X71

图4

- 34 -

2) 交叉编译驱动:进入/root/Backup/Driver/xidian_seg7目录下,编译源程序。

图5

3) 在确认测试代码和Makefile文件编写无误之后,交叉编译测试代码。

图6

4) 调用file命令查看文件格式,编译出来的可执行程序seg7_test是ARM的ELF文

件。

图7

驱动程序的移植、注册与测试

1) 首先确认实验板和主机的网络连通,然后调用scp命令将测试程序和驱动程序模块

拷贝到目标机上(目标机root用户的密码为“xidian”)。

- 35 -

图8

拷贝成功后,驱动和测试程序保存在目标机的/opt目录下面,如图9所示:

图9

2) 在目标机上利用mknod命令建立设备文件节点;并利用insmod命令动态加载驱动

模块,同时利用lsmod命令查看驱动模块的加载情况 。

图10

执行完以上三条命令后,驱动模块成功添加进内核中,完成注册。 3) 在目标机的/opt目录下执行驱动测试程序。

- 36 -

图11

首先在实验板终端驱动测试程序中输入0,打开设备,如果设备成功打开,会在终端打印出提示信息如图12所示。

图12

然后依次调用选项1,2,3,4等,观察实验板上七段数码管执行的结果,分析之前的驱动测试程序各个函数模块的功能,最后在测试程序执行完毕之后,键入dmesg命令,查看驱动测试程序在测试和加载中的输出信息(如图13所示),分析驱动代码,加深对其的理解。

图13

4) 4)卸载驱动程序,删除设备文件。

- 37 -

图14

- 38 -

实验四 Qt编写简单的计算器

【实验目的】

1) 熟悉QtCreator的简单操作。 2) 了解Qt程序编写框架。

3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。

【实验内容】

1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton等。 2) 用QtCreator创建工程,用Qt编写计算器程序。 3) 对计算器程序进行移植。

【实验步骤】

创建工程

1) 打开QtCreator,如图1所示。

图1

2) 选择File->New File or Project,然后在弹出的对话框中选择Other Project->Empty Qt

project(如图2所示),然后进入下一步。

- 39 -

图2

3) 定义新工程的工程名并选择保存路径(如图3所示),然后进入下一步。

图3

- 40 -

4) 选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PATH的选择(如图4所示),

然后进入下一步,完成新工程的创建(如图5所示)。

图4

图5

- 41 -

计算器程序的实现

计算器程序主要分以下两部分工作:一是实现计算器的图形界面;二是实现按键事件和该事件对应的功能绑定,即信号和对应处理槽函数的绑定。

1) 计算器图形界面的实现

通过分析计算器的功能我们可知,需要16个按键和一个显示框,同时考虑到整体的排布,还需要水平布局器和垂直布局器。通过组织这些类我们可以实现一个简单的带有数字0~9,可以进行简单四则运算且具有清屏功能的计算器。对于这些类的具体操作会在后面的代码中详细说明。

2) 信号和对应槽函数的绑定

分析计算器的按键我们可以把按键事件分为以下三类,一是简单的数字按键, 主要进行数字的录入,这类按键包括按键0~9;二是运算操作键,用于输入数算符号,进行数算和结果的显示,这类按键包括“+”,“-”,“*”,“/”,“=”;三是清屏操作键,用于显示框显示信息的清除。

3) 进入刚才创建的空工程,双击左侧的Calculator.pro,在主编辑框中目前显示

Calculator.pro的内容为空,如图6所示。这是因为目前什么文件都没有添加的缘故。

- 42 -

图6

4) 添加文件calculator.h

在工程Calculator上面点击右键,然后点击Add New,选择添加C++ Header File(如图7所示),进入下一步后输入文件名calculator.h(如图8所示),然后完成文件的添加。

图7

- 43 -

图8

5) 添加文件calculator.cpp和main.cpp

与添加文件calculator.h的过程类似,只是在选择文件类型时选择为C++ Source File。完成后可以查看Calculator.pro文件的内容,整个工程的文件结构如图9所示。

- 44 -

图9

计算器程序在X86上的编译运行

1) 完成源程序的编辑后,可以直接点击图10中所示的运行按钮,这时QtCreator会自

动编译源程序并生成可执行程序(这里默认的编译环境是X86的,生成的可执行程序可以直接在宿主机上运行)。可以在/root/Work/Calculator-build-desktop目录下找到可执行程序。

图10

2) 2)计算器程序在X86上的界面如图11所示,可以进行简单的计算来测试此计算

器的功能。

- 45 -

图11

计算器程序的移植

上面所说的可执行程序是由QtCreator调用用X86上的qmake命令生成Makefile文件后调用make命令自动生成。下面将通过交叉编译工具链中的qmake命令生成Makefile文件并用make命令生成ARM上的可执行程序。

1) 进入/root/Work/Calculator目录下,可以看到计算器程序的几个源文件,如图12所

示。

图12

2) 用qmake命令生成Makefile文件,然后用make编译源程序(如图13所示),生成

可执行程序(如图14所示)。由于交叉编译工具链的路径已经添加到环境变量PATH中了,所以这里用到的qmake是ARM上的命令(可以通过 ls /opt/buildroot-2011.02/output/host/usr/bin找到qmake文件)。

- 46 -

图13

图14

3) 进入目标机,在目标机的/root目录下用scp命令拷贝上一步生成的可执行文件。然

后运行计算器程序(如图15所示)。

图15

4) 程序在目标机显示屏中的运行结果如图16所示。由于本程序没有集成键盘动作,

只能通过鼠标点击按钮来进行操作。可以用目标机显示屏的触屏笔或者连接一个USB口的鼠标进行程序测试。

图16

- 47 -

个人总结

本次试验让我熟悉了Linux的启动流程,练习了Linux的命令系统,加深了Linux开发环境的了解,从宿主机和目标机的连接,到交叉编译,再到GDB交叉调试,烧写到内核版这一系列的开发嵌入式程序的流程。通过动手实现,我对Linux的网络编程也有了初步的认识,大致掌握了多进程、多线程和多路复用三种方式并发服务器的实现过程。同时在Linux驱动实验中我初步掌握了驱动程序的编写框架,对今后进一步提升打下基础。QT作为一种功能强大的GUI软件,在本次实验中我大致摸到了皮毛,今后要不断实践,不断进步。

总的来说,本次实验让我巩固了课堂上学的知识,并有了亲手付诸实践的经历,对将来的学习和工作都大有裨益。

- 48 -

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo6.cn 版权所有 赣ICP备2024042791号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务