久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

嵌入式Linux網(wǎng)絡(luò)通信實(shí)驗(yàn)(最終5篇)

時(shí)間:2019-05-14 23:02:46下載本文作者:會(huì)員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《嵌入式Linux網(wǎng)絡(luò)通信實(shí)驗(yàn)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《嵌入式Linux網(wǎng)絡(luò)通信實(shí)驗(yàn)》。

第一篇:嵌入式Linux網(wǎng)絡(luò)通信實(shí)驗(yàn)

淮陰工學(xué)院

Linux操作系統(tǒng)及嵌入式應(yīng)用

實(shí)驗(yàn)報(bào)告

系(院): 計(jì)算機(jī)工程學(xué)院 專

業(yè):計(jì)算機(jī)科學(xué)與技術(shù)(物聯(lián)網(wǎng)工程)班

級: 物聯(lián)網(wǎng)1111

名: 蔣振 學(xué)

號:1111307116 指導(dǎo)教師:

孫成富

學(xué)年學(xué)期:

2014 ~ 2015 學(xué)年 第 學(xué)期

實(shí)驗(yàn)1 Socket全雙工通信實(shí)驗(yàn) 實(shí)驗(yàn)?zāi)康?/p>

1)了解網(wǎng)絡(luò)套接字編程

2)掌握網(wǎng)絡(luò)通信服務(wù)器和客戶端的工作過程 3)利用多線程實(shí)現(xiàn)全雙工通信 4)下載并運(yùn)行網(wǎng)絡(luò)應(yīng)用程序

2實(shí)驗(yàn)環(huán)境

1)宿主機(jī):Fedora 10 2)嵌入式Linux軟硬件系統(tǒng):TQ2440(基于S3C2440A)開發(fā)板

3實(shí)驗(yàn)準(zhǔn)備

3.1Linux下的多線程編程

進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到何種程度的數(shù)據(jù)結(jié)構(gòu)的匯集。從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。

線程是進(jìn)程的一個(gè)執(zhí)行流,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。一個(gè)進(jìn)程由幾個(gè)線程組成(擁有很多相對獨(dú)立的執(zhí)行流的用戶程序共享應(yīng)用程序的大部分?jǐn)?shù)據(jù)結(jié)構(gòu)),線程與同屬一個(gè)進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。

本實(shí)驗(yàn)使用多線程解決了并行通信的難題。關(guān)于多線程的函數(shù)主要是使用pthread.h頭文件中定義的多線程操作函數(shù),如pthread_create、pthread_cancel等。

3.2TCP/IP概述

3.2.1TCP/IP的分層模型

OSI協(xié)議參考模型,是基于國際標(biāo)準(zhǔn)化組織(ISO)的建議發(fā)展起來的,它分為7個(gè)層次:應(yīng)用層、表示層、會(huì)話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層及物理層。這個(gè)7層的協(xié)議模型雖然規(guī)定得非常細(xì)致和完善,但在實(shí)際中卻得不到廣泛 的應(yīng)用,其重要的原因之一就在于它過于復(fù)雜。但它仍是此后很多協(xié)議模型的基礎(chǔ)。與此相區(qū)別的TCP/IP協(xié)議模型將OSI的7層協(xié)議模型簡化為4層,從而更有利于實(shí)現(xiàn)和使用。

TCP/IP的協(xié)議參考模型和OSI協(xié)議參考模型的對應(yīng)關(guān)系如下圖 1所示:

SYN J SYN K,ACK J+1 ACK K+1 圖1 TCP/IP協(xié)議與OSI協(xié)議參考模型對比圖

3.2.2TCP的三次握手

TCP是面向連接的,所謂面向連接,就是當(dāng)計(jì)算機(jī)雙方通信時(shí)必需先建立連接,然后進(jìn)行數(shù)據(jù)通信,最后拆除連接三個(gè)過程。TCP在建立連接時(shí)又分三步走:

第一步(A->B):主機(jī)A向主機(jī)B發(fā)送一個(gè)包含SYN即同步(Synchronize)標(biāo)志的TCP報(bào)文,SYN同步報(bào)文會(huì)指明客戶端使用的端口以及TCP連接的初始序號;

第二步(B->A):主機(jī)B在收到客戶端的SYN報(bào)文后,將返回一個(gè)SYN+ACK的報(bào)文,表示主機(jī)B的請求被接受,同時(shí)TCP序號被加一,ACK即確認(rèn)(Acknowledgment)。

第三步(A->B):主機(jī)A也返回一個(gè)確認(rèn)報(bào)文ACK給服務(wù)器端,同樣TCP序列號被加一,到此一個(gè)TCP連接完成。

3.3套接字(socket)概述

3.3.1套接字類型

1)流式套接字(SOCK_STREAM)

流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)目煽啃院晚樞蛐浴?)數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)

數(shù)據(jù)報(bào)套接字定義了一種無可靠、面向無連接的服務(wù),數(shù)據(jù)通過相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無序的,并且不保證是可靠、無差錯(cuò)的。它使用數(shù)據(jù)報(bào)協(xié)議UDP

3)原始套接字(SOCK_RAW)

原始套接字允許對底層協(xié)議如IP或ICMP進(jìn)行直接訪問,它功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開發(fā)。3.3.2

套接字編程

使用TCP時(shí)Socket編程流程圖如圖2所示。

服務(wù)器端 socket bind bind listen accept recv/recvfrom send/sendto close connect send/sendto recv/recvfrom close客戶端 socket

圖2 TCP時(shí)Socket編程流程圖

使用UDP時(shí)Socket編程如圖3所示。

socket listen accept recvfrom sendto或 socket connect send recv close或 recv send closesendto recvfrom或或 圖3 TCP時(shí)Socket編程流程圖

實(shí)驗(yàn)過程

4.1

簡單的Socket通信程序設(shè)計(jì)

在Fedora 10操作系統(tǒng)的/home目錄下創(chuàng)建NetCommunicator目錄,并新建client.c和server.c源文件,NetCommunicator目錄如圖4所示。

圖4 NetCommunicator截圖

分別編寫Socket通信的客戶端和服務(wù)器端源代碼。編寫完畢,使用gcc編譯上述client.c和server.c源文件生成client和server可執(zhí)行程序(x86平臺),編譯過程如圖5所示。使用arm-linux-gcc編譯上述client.c和server.c源文件生成a_client和a_server可執(zhí)行程序(ARM平臺)。編譯過程如圖6所示.圖5 編譯x86 Socket通信程序過程截圖

圖6 編譯ARM平臺的可執(zhí)行程序

PC機(jī)測試,測試結(jié)果如下圖所示:

圖7 執(zhí)行服務(wù)器端程序

圖8 執(zhí)行客戶端程序

圖9 服務(wù)器端接收到客戶端發(fā)來的消息截圖

使用gcc-linux-gcc生成ARM平臺下的可執(zhí)行程序a_client和a_server,編譯結(jié)果如圖10所示。

圖10 編譯ARM平臺可執(zhí)行程序

4.2

全雙工Socket通信程序設(shè)計(jì)

為了實(shí)現(xiàn)全雙工通信,服務(wù)端進(jìn)程和客戶端進(jìn)程均使用了兩個(gè)線程,一個(gè)負(fù)責(zé)收,另一個(gè)負(fù)責(zé)發(fā)。

在NetCommunicator目錄,并新建clientV2.c和serverV2.c源文件,如圖11所示,編寫完畢,編譯通過生成clientV2和serverV2可執(zhí)行程序。

圖11 NetCommunicator工作目錄

PC機(jī)測試,測試結(jié)果如下圖所示:

圖12 客戶端進(jìn)程

圖13 服務(wù)器端進(jìn)程

實(shí)驗(yàn)總結(jié)

通過本次實(shí)驗(yàn),了解了Linux環(huán)境下的Socket程序設(shè)計(jì)流程,對網(wǎng)絡(luò)編程有了一定的了解,提高了動(dòng)手實(shí)踐的能力。

第二篇:嵌入式linu學(xué)習(xí)心得

嵌入式Linux學(xué)習(xí)心得

1、Linux命令

ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄

cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息

mkdir:創(chuàng)建目錄

fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看

->代表是鏈接文件,類似window下的快捷方式。

cp: 復(fù)制命令,例子cp 文件名 /home/dir/

mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d

man:查看某個(gè)命令的幫助,man 命令

2、各系統(tǒng)目錄的功能

drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。

/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序

/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開頭)、字符設(shè)備(c開頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。

/home : 用戶目錄,存放用戶的文件,/lib:存放庫文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫。

/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。

/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如

果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d

/opt:用戶安裝的應(yīng)用程序

/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號。每個(gè)進(jìn)程號目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息

對于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。

/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。

/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫文件,src包含Linux2.4的內(nèi)核源碼

/var:存放是臨時(shí)變量

3、

第三篇:嵌入式實(shí)驗(yàn)2

南昌航空大學(xué)實(shí)驗(yàn)報(bào)告

二0一一 年 10月 16日

課程名稱: 嵌入式系統(tǒng) 實(shí)驗(yàn)名稱: 串行端口程序設(shè)計(jì) 班 級: 080611 學(xué)生姓名: 曹啟斌 學(xué)號: 08061107 指導(dǎo)教師評定: 簽名:

一、實(shí)驗(yàn)?zāi)康?了解在linux環(huán)境下串行程序設(shè)計(jì)的基本方法。掌握終端的主要屬性及設(shè)置方法,熟悉終端IO函數(shù)的使用。3 學(xué)習(xí)使用多線程來完成串口的收發(fā)處理。

二、實(shí)驗(yàn)內(nèi)容

讀懂程序源代碼,學(xué)習(xí)終端IO函數(shù)tcgetattr(), tcsetattr(),tcflush()的使用方法,學(xué)習(xí)將多線程編程應(yīng)用到串口的接收和發(fā)送程序設(shè)計(jì)中。

三、預(yù)備知識

1、有C語言基礎(chǔ)。

2、掌握在LINUX下常用編輯器的使用。

3、掌握Makefile 的編寫和使用。

4、掌握Linux下的程序編譯與交叉編譯過程

四、實(shí)驗(yàn)設(shè)備及工具

硬件:UP-NETARM2410-S嵌入式實(shí)驗(yàn)儀,PC機(jī)pentumn500以上, 硬盤40G以上,內(nèi)存大于128M。

軟件:PC機(jī)操作系統(tǒng)REDHAT LINUX 9.0 +MINICOM + AMRLINUX開發(fā)環(huán)境

五、實(shí)驗(yàn)原理

Linux 操作系統(tǒng)從一開始就對串行口提供了很好的支持,為進(jìn)行串行通訊提供了大量的函數(shù),我們的實(shí)驗(yàn)主要是為掌握在LINUX中進(jìn)行串行通訊編程的基本方法。

1.程序流程圖

程序流程圖如圖2-3所示:

圖2-3 程序流程圖

2串口操作需要的頭文件

#include /*標(biāo)準(zhǔn)輸入輸出定義*/ #include /*標(biāo)準(zhǔn)函數(shù)庫定義*/ #include /*linux標(biāo)準(zhǔn)函數(shù)定義*/ #include #include #include /*文件控制定義*/ #include /*PPSIX 終端控制定義*/ #include /*錯(cuò)誤號定義*/ #include

/*線程庫定義*/ 3打開串口

在 Linux 下串口文件是位于 /dev 下,串口一為/dev/ttyS0,串口二為 /dev/ttyS1,打開串口是通過使用標(biāo)準(zhǔn)的文件打開函數(shù)操作:

int fd;/*以讀寫方式打開串口*/ fd = open(“/dev/ttyS0”, O_RDWR);if(-1 == fd){ perror(“ 提示錯(cuò)誤!”);}

4設(shè)置串口

最基本的設(shè)置串口包括波特率設(shè)置,效驗(yàn)位和停止位設(shè)置。串口的設(shè)置主要是設(shè)置 struct termios 結(jié)構(gòu)體的各成員值。

struct termio { unsigned short c_iflag;/* 輸入模式標(biāo)志 */

unsigned short c_oflag;/* 輸出模式標(biāo)志 */

unsigned short c_cflag;/* 控制模式標(biāo)志 */

unsigned short c_lflag;/* local mode flags */

unsigned char c_line;/* line discipline */

unsigned char c_cc[NCC];/* control characters */ };設(shè)置這個(gè)結(jié)構(gòu)體很復(fù)雜,可以參考man手冊或者由趙克佳、沈志宇編寫的《UNIX程序編寫教程》,我這里就只考慮常見的一些設(shè)置:

波特率設(shè)置:

下面是修改波特率的代碼: struct termios Opt;tcgetattr(fd, &Opt);cfsetispeed(&Opt,B19200);/*設(shè)置為19200Bps*/ cfsetospeed(&Opt,B19200);tcsetattr(fd,TCANOW,&Opt);校驗(yàn)位和停止位的設(shè)置: 無效驗(yàn) 8位

Option.c_cflag &= ~PARENB;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS8;奇效驗(yàn)(Odd)7位

Option.c_cflag |= ~PARENB;Option.c_cflag &= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS7;偶效驗(yàn)(Even)7位

Option.c_cflag &= ~PARENB;Option.c_cflag |= ~PARODD;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= ~CSIZE;Option.c_cflag |= ~CS7;Space效驗(yàn) 7位

Option.c_cflag &= ~PARENB;Option.c_cflag &= ~CSTOPB;Option.c_cflag &= &~CSIZE;Option.c_cflag |= CS8;設(shè)置停止位:

1位:

options.c_cflag &= ~CSTOPB;2位: options.c_cflag |= CSTOPB;需要注意的是,如果不是開發(fā)終端之類的,只是串口傳輸數(shù)據(jù),而不需要串口來處理,那么使用原始模式(Raw Mode)方式來通訊,設(shè)置方式如下:

options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);/*Input*/ options.c_oflag &= ~OPOST;/*Output*/ 5讀寫串口

設(shè)置好串口之后,讀寫串口就很容易了,把串口當(dāng)作文件讀寫就可以了。發(fā)送數(shù)據(jù):

char buffer[1024];int Length=1024;int nByte;nByte = write(fd, buffer ,Length)讀取串口數(shù)據(jù):

使用文件操作read函數(shù)讀取,如果設(shè)置為原始模式(Raw Mode)傳輸數(shù)據(jù),那么read函數(shù)返回的字符數(shù)是實(shí)際串口收到的字符數(shù)。

可以使用操作文件的函數(shù)來實(shí)現(xiàn)異步讀取,如fcntl,或者select等來操作。char buff[1024];int Len=1024;int readByte = read(fd, buff, Len);6關(guān)閉串口

關(guān)閉串口就是關(guān)閉文件。close(fd);7空MODEM通訊連接電纜

一般進(jìn)行串口調(diào)試使用空MODEM連接電纜,其接線方式如下圖2-4所示:

圖2-4 實(shí)用RS-232C通訊連線

六、實(shí)驗(yàn)步驟

1.2.3.4.進(jìn)入expbasic

主站蜘蛛池模板: 白丝女仆被??免费网站| 人人爽人人爽人人片a| 成人无码www在线看免费| 美女内射毛片在线看免费人动物| 欧美激情猛片xxxⅹ大3| 国产综合18久久久久久| 精品午夜福利1000在线观看| 国产欧美va天堂在线观看视频| 国产高清一区二区三区视频| 无遮挡色视频免费观看| 97久久超碰国产精品旧版| 国产精品无码不卡一区二区三区| 欧洲性开放大片免费无码| 少妇人妻14页_麻花色| 亚洲中文波霸中文字幕| 久久免费看少妇高潮v片特黄| 亚洲熟妇av一区二区三区宅男| 亚洲人成在线影院| 日本人成网站18禁止久久影院| 精品人人妻人人澡人人爽牛牛| 性高朝久久久久久久3小时| 欧美日韩国产成人高清视频| 欧美人成片免费看视频| 又粗又黄又猛又爽大片免费| 国模冰莲极品自慰人体| 国产精品人妻久久毛片| 一二三四在线视频观看社区| 无码人妻一区二区无费| 熟女人妇交换俱乐部| 国产精品国产午夜免费看福利| 69久久夜色精品国产69| 老太婆性杂交欧美肥老太| 国产成人国拍亚洲精品| 午夜亚洲www湿好大| 亚洲av无码一区二区乱子仑| 亚洲女久久久噜噜噜熟女| 国产精品av一区二区三区不卡蜜| 国产女人精品视频国产灰线| 麻豆画精品传媒2021一二三区| 亚洲精品中文字幕一区二区三区| 日韩欧美亚洲综合久久影院ds|