<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 深入研究嵌入式web服務(wù)器視頻監(jiān)控的應(yīng)用

          深入研究嵌入式web服務(wù)器視頻監(jiān)控的應(yīng)用

          作者: 時間:2012-11-21 來源:網(wǎng)絡(luò) 收藏

          在thttpd.c的main函數(shù)里添加設(shè)備支持:打開串口設(shè)備。

          intcom1fd=open(/dev/ttyS1,O_RDWR|O_NOCTTY);

          傳輸波特率的設(shè)定:

          tcgetattr(com1fd,oldtio);

          cfmakeraw(oldtio);

          cfsetispeed(oldtio,B9600);

          cfsetospeed(oldtio,B9600);

          tcsetattr(com1fd,TCSANOW,oldtio);

          在libhttpd.c里包含定義云臺信令的頭文件后,在httpd_parse_request中添加如下代碼,

          memcpy(cmd,YT_FOCUS_IN,YT_CMD_NUM);

          請求轉(zhuǎn)換為對應(yīng)的云臺信令存儲在cmd數(shù)組中,最后,由于uclinux把所有設(shè)備作為文件操作,所以可以通過write(com1fd,cmd,YT_CMD_NUM);將云臺信令正確發(fā)出去。

          8.配置信息的保存(MTD驅(qū)動的實現(xiàn))

          uCLinux在ARM上移植過程中,它是在Bootloader初始化系統(tǒng)并重映射內(nèi)存后,由Bootloader將Kernel和根文件系統(tǒng)的映像從FLASH上直接復(fù)制到RAMuCLinux系統(tǒng)起始地址(0x8000),然后通過設(shè)定PC值將控制權(quán)交給uCLinux。

          這種方式采用的是ROMFS文件系統(tǒng),系統(tǒng)結(jié)構(gòu)簡單,實現(xiàn)方便,但ROMFS是只讀文件系統(tǒng)。RAM盤雖可寫但一旦掉電就會丟失內(nèi)容。若想長久保存程序的配置文件可采用兩種方法:一種是將FLASH上劃出幾個固定的扇區(qū)可讀可寫,用以專門存放所有要用到的配置文件;另一種是建立可寫的JFFS2文件系統(tǒng)。前一種方法代碼簡單、靈活,適用于不太頻繁的文件寫入。后一種實現(xiàn)起來也比較簡單,但時間、空間等方面的代價要高于前一種,適用于非常頻繁的文件寫入(比如一分鐘超過十次)?;诒鞠到y(tǒng)中對配置數(shù)據(jù)存儲的實時性要求不高,而資源又十分寶貴,因此考慮采用第一種方法,這就是MTD(memorytechnologydevice內(nèi)存技術(shù)設(shè)備)。MTD是用于訪問memory設(shè)備(ROM、flash)的Linux的子系統(tǒng)。其所有源代碼在/drivers/mtd子目錄下。

          由于MTD的主要目的是為了使新的memory設(shè)備的驅(qū)動更加簡單,因為它介于特定的閃存設(shè)備和文件系統(tǒng)之間,可以理解為它在硬件和上層之間提供了一個抽象的接口。所以硬件驅(qū)動程序不需要知道象JFFS2和FTL那樣的用戶模塊使用的方法。所有它們真正需要提供的就是一組對底層閃存進行read、write和erase操作的簡單例程,即/mtd目錄下mtd-utils.c相應(yīng)函數(shù)。將mtd-utils.c繼承過來,另外,加上手工添加的flash分區(qū)表即可達到配置文件保存的目的。

          配置信息的保存

          本系統(tǒng)只有一片F(xiàn)LASH,大小為2M。擬分區(qū)如下:

          name:bootloader(128KB),

          size:0x20000,

          offset:0x0,

          mask_flags:MTD_WRITEABLE//只讀分區(qū)

          name:kernelrootfs(1856KB),

          size:0x1D0000,

          offset:0x20000

          name:systemconfig(64KB),

          size:0x10000,

          offset:0x1F0000

          將包含本分區(qū)表的文件放在drivers/mtd/map下,并修改相應(yīng)的makefile使之編譯時有效。

          然后,選擇適當?shù)腗TD用戶模塊,啟用對閃存的訪問:MTD_CHAR和MTD_BLOCK。MTD_CHAR提供對閃存的原始字符訪問,而MTD_BLOCK將閃存設(shè)計為可以在上面創(chuàng)建文件系統(tǒng)的常規(guī)塊設(shè)備(象IDE磁盤)。與MTD_CHAR關(guān)聯(lián)的設(shè)備是在/vendor/Samsung/4510B/makefile的DEVICES中添加mtd0,c,90,0、mtd1,c,90,2、mtd2,c,90,4,而與MTD_BLOCK關(guān)聯(lián)的設(shè)備是添加mtdblock0,b,30,0、mtdblock1,b,30,1、mtdblock2,b,30,2。

          最后,需要將MTD子系統(tǒng)編譯到內(nèi)核中,即打開makemenuconfig里MTD相關(guān)的選項。

          9.配置信息的管理

          在thttpd.c的main函數(shù),加入open(/dev/mtd2,O_RDWR)可打開mtdblock2。將drivers/mtd下mtd-utils.c復(fù)制到user/thttpd目錄下,即可使用其中的一些函數(shù)方便的實現(xiàn)flash的read和write操作。

          10.結(jié)語

          對于Web,其意義是重大的。它為我們管理、控制和監(jiān)測各種各樣設(shè)備提供了一個很好的途徑。這種設(shè)備可以是具有有限內(nèi)存資源的8位或16位系統(tǒng),已足夠提供一個用戶界面,而且這種方式是基于Internet的。這種設(shè)備可以在世界任何一個地方,只要它連入Internet就能夠控制它。

          目前國外的相關(guān)很多,如Pharlap公司的MicroWeb、AgranatSystems公司的EmWeb、EmWare公司的emMicro、Allegro公司的RomPager、WindRiver公司的Wind,還有Boa、Enea、PicoWeb、ChipWeb、Ipic、NetAcquire、Voyager、Quiotix等。國內(nèi)的有Webit。

          創(chuàng)新:

          1. 技術(shù)的已越來越廣泛,但大多采用比較簡單的BOA,真正應(yīng)用功能更強大的Thttpd的方案少之又少,本文正是Thttpd在實際應(yīng)用中的。

          2. 本文根據(jù)監(jiān)控系統(tǒng)對數(shù)據(jù)吞吐量和安全可靠性等各方面的實際要求,結(jié)合相關(guān)研究的新進展,討論了在監(jiān)控系統(tǒng)設(shè)計中的應(yīng)用技巧,并詳細做了實現(xiàn)上的闡述。文中涉及的某些技術(shù)應(yīng)用技巧,譬如web server的功能框圖,可廣范應(yīng)用于各種基于嵌入式web技術(shù)的系統(tǒng)中去。譬如路由器設(shè)計。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();