日韩欧美国产极速不卡一区,国产手机视频在线观看尤物,国产亚洲欧美日韩蜜芽一区,亚洲精品国产免费,亚洲二区三区无码中文,A大片亚洲AV无码一区二区三区,日韩国语国产无码123

您好,歡迎來到維庫電子市場網(wǎng) 登錄 | 免費注冊

Linux電子收款�
閱讀�4940時間�2011-01-19 11:28:02

  Linux電子收款機以使用Linux 操作系統(tǒng)、并�打印�的電子收款機為平�,將打印機設(shè)備視為文�,通過對該文件的寫操作來實�(xiàn)打印功能。通常情況�,對文件系統(tǒng)的監(jiān)控是通過系統(tǒng)�(diào)用劫持來實現(xiàn)的。但�1) Linux 2.6 版本之后的內(nèi)�,系�(tǒng)�(diào)用表的地址已經(jīng)不能�(dǎo)�,系�(tǒng)�(diào)用劫持的實現(xiàn)難度加大�2) 劫持 sys_write 系統(tǒng)�(diào)用后,所有的文件寫入操作都會被劫持,對系�(tǒng)的性能有較大影��3) 修改后的打印�(shù)�(jù)必須存入銷售軟件進程的用��(nèi)�空間,才能調(diào)用文件驅(qū)動模塊write 函數(shù)將其打印出來。而侵入銷售軟件進程將大大降低系�(tǒng)的獨立性和可靠��

進程間通信

  首先需要解決的就是�(nèi)核態(tài)與用戶態(tài)的進程間通信(interprocess communicatiON, IPC)。而在各種IPC 方法中,最適合此處�(shè)計需要的就是netlink socket 技�(shù)�

  Netlink socket 最早出�(xiàn)于Linux 2.2 版的�(nèi)核中,并�2. 4 版以后的版本中作為主要的�(nèi)核與用戶空間的通信方式而被廣泛使用。相對于系統(tǒng)�(diào)用、ioctl 以及proc 文件系統(tǒng)等IPC方法而言,它具有簡單易用、異步通信(適合大�(shù)�(jù)傳輸�、無編譯依賴(可模塊實現(xiàn)�、支持多�、支持內(nèi)核發(fā)起會話等�(yōu)�。其中“異步通信、無編譯依賴、支持內(nèi)核發(fā)起會話�

  這三點正是本系統(tǒng)需要的�(guān)鍵特�,也是選用該技�(shù)的最主要原因�

  Netlink socket 的通信依據(jù)是一個對�(yīng)于進程的標(biāo)�,一般定為該進程的ID。當(dāng)通信的一端處于中斷過程時,該�(biāo)識為0。當(dāng)使用netlink socket 進行通信,通信的雙方都是用戶態(tài)進程,則使用方法類似于消息隊�。但通信雙方有一端是中斷過程,使用方法則不同。Netlinksocket 的特點是對中斷過程的支持,它在內(nèi)核空間接收用戶空間數(shù)�(jù)時不再需要用戶自行啟動一個內(nèi)核線�,而是通過另一個軟中斷�(diào)用用戶事先指定的接收函數(shù),這樣就可以保證數(shù)�(jù)接收的實時��

  �(dāng) netlink socket 用于�(nèi)核空間與用戶空間的通信�,在用戶空間的創(chuàng)建方法和一般套接字使用類似,但�(nèi)核空間的�(chuàng)建方法則不同。在�(nèi)核模塊中使用netlink_kernel_create()函數(shù)�(chuàng)建socket 時需要指明接收函�(shù)。之后用戶空間進程�(chuàng)建socket,并將通信�(biāo)識(一般是該進程的ID)發(fā)送到�(nèi)核空�。這樣�(nèi)核空間獲得了用戶空間進程的通信�(biāo)識后就可以進行通信了�

打印進程

  �(dāng)收到電子收款機的銷售軟件向并口打印機�(fā)出的打印請求�,內(nèi)核態(tài)的并口打印模塊需在將�(shù)�(jù)�(fā)送給用戶�(tài)的守護進程之后阻塞打印請求進程。并且,�(dāng)且僅�(dāng)接收到守護進程的返回數(shù)�(jù)�,才會喚醒打印請求進程完成打印�

  如何實現(xiàn)打印進程的阻塞及喚醒就是一個關(guān)鍵技�(shù)點。因為電子收款機只配備一個打印機、不需要復(fù)雜的互斥技�(shù),所以只要使用“簡單睡眠”就可以達到這個目�(biāo)�

write 操作

  Linux 操作系統(tǒng)將設(shè)備看作文�,每個Linux 的設(shè)備驅(qū)動程序都定義了一� file_operation�(jié)�(gòu),結(jié)�(gòu)中的各個成員是�(qū)動模塊中定義函數(shù)的指�, 通過這些函數(shù)具體實現(xiàn)對文件的open, read, write 等操�。因�,只要將并口打印�(qū)動模塊的file_operation �(jié)�(gòu)常量——lp_fops的write 成員的值由lp_write 替換為指向攔截函�(shù)的指針就能實時地攔截并口打印機的打印操作�

  這里需要實�(xiàn)兩個關(guān)鍵函�(shù)�

  1)lp_write_from_kernellp_write_from_kernel 函數(shù)實現(xiàn)�(nèi)核空間的緩沖區(qū)�(shù)�(jù)的打印功�。來自守護進程的修改后打印�(shù)�(jù)是保存在�(nèi)核空間的,因此不能調(diào)用原有的lp_write 函數(shù)進行打印。具體的實現(xiàn)可依照lp_write,只要將�(diào)用copy_from_user 函數(shù)的地方改為調(diào)用memcpy 函數(shù)即可�

  2)lp_interceptlp_intercept 函數(shù)函數(shù)用于替換lp_write,攔截并口打印驅(qū)動的write 操作,實�(xiàn)打印�(shù)�(jù)截取與修改:�(dāng)電子收款機的銷售軟件�(diào)用并口打印驅(qū)動的write 函數(shù)時,將寫緩沖區(qū)的打印數(shù)�(jù)�(fā)送給守護進程;待守護進程返回修改后的打印�(shù)�(jù)(附加了稅控碼),調(diào)用lp_write_from_kernel 將其打印出來�

Linux電子收款機相�(guān)技�(shù)資料更多>>

維庫電子�,電子知�,一查百��

已收錄詞�153979

大英�| 常山�| 阿拉善左�| 芦山�| 大埔�| 谢通门�| 钟祥�| 额尔古纳�| 靖边�| 扶沟�| 边坝�| 武山�| 海南�| 西充�| 漾濞| 襄汾�| 新昌�| 吴堡�| 聂拉木县| 郓城�| 买车| 常宁�| 天等�| 定兴�| 浠水�| 兰州�| 沙田�| 南郑�| 留坝�| 赤水�| 江城| 陇川�| 扎囊�| 湟源�| 辉南�| 玛多�| 酉阳| 策勒�| 黑水�| 石楼�| 巴楚�|