freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于arm嵌入式系統(tǒng)的觸摸屏驅(qū)動程序開發(fā)(編輯修改稿)

2025-07-11 15:21 本頁面
 

【文章內(nèi)容簡介】 。設(shè)備用完之后,可以再用戶空間通過移除已加載的驅(qū)動設(shè)備命令 rmmod 將設(shè)備卸載,此時的入口點是 cleanup_module函數(shù),在該函數(shù)中完成設(shè)備的卸載。 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 10 頁 第三章 嵌入式系統(tǒng)開發(fā)環(huán)境的搭建 絕大多數(shù) 的軟件開發(fā)都是以本地編譯方式進行的,即在本機上開發(fā)編譯、本機上運行的方式。但是,由于開發(fā)板上沒有足夠 的資源來運行開發(fā)工具和調(diào)試工具。因此嵌入式系統(tǒng)軟件的開發(fā)通常采用交叉編譯的方式。所謂交叉編譯,就是指在一個硬件平臺上生成可以在另一個不同硬件平臺上執(zhí)行的代碼。 建立交叉編譯環(huán)境 將 拷貝到目錄 /opt 下,然后進入該目錄,執(zhí)行解壓命令: mv /opt cd /tmp tar xvzf –C 然后再運行如下命令: gedit /root/.bashrc 在打開的文件的末尾加上如下內(nèi)容: export PATH=$PATH:/opt/usr/locla/arm/ 然后保存退出 重新登錄 Redhat 系統(tǒng),使以上設(shè)置生效,在命令行輸入 armlinuxgcc –v, 會出現(xiàn) armlinuxgcc 的版本號,這說明交叉編譯環(huán)境已經(jīng)安裝成功。 配置超級終端 超級終端程序通常位于 windows 系統(tǒng)的“開始 程序 附件 通訊”中,選擇運行該程序,一般會彈出提示窗口,詢 問你是否將 HyperTerminal 作為默認(rèn)的 tel程序,此時選擇“否”。 接下來彈出來的窗口,選擇“取消”。 此時系統(tǒng)提示“您確定要取消嗎 ?” ,選擇“是”,接著點擊提示窗口的“確定”,進入下一步。 超級終端會要求你為新的連接取個新的名字,我在配置的時候取的是“ tty”。 當(dāng)你命名完以后,又會跳出一個對話框,選擇開發(fā)板的串口,我選擇的是串口4. 最后一步,最重要的一步,數(shù)據(jù)流控制必須選擇“無”,另外板子的串口波特率設(shè)為 115200。 當(dāng)所有的參數(shù)都設(shè)置好后,超級終端就配置好了 。 配置網(wǎng)絡(luò)文件系統(tǒng) NFS 服務(wù) 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 11 頁 在配置 NFS 服務(wù)之前,先使用查看一下 Linux 系統(tǒng)在安裝的時候是否已經(jīng)安裝了 NFS 服務(wù),方法如下:輸入命令 setup,然后在出現(xiàn)的藍色窗口中選擇 System services,進入后,如果看到選項前的中括號有“ *” ,表示已經(jīng)被選中,如果沒有,就表示沒選中;現(xiàn)在選中 NFS 服務(wù),去掉 iptables,然后保存退出。 接下來運行命令 gedit /etc/exports 在打開的 NFS 服務(wù)的配置文件中添加以下內(nèi)容: /home/share (rw,sync,no_root_squash) 其中: /home/share 表示 NFS 共享目錄,它可以作為開發(fā)板的根文件系統(tǒng) 是開發(fā)板的 IP 地址,注意 IP 地址前有空格。 (這里的 IP地址可以用 *代替,表示所有的客戶機都可以掛載次 目錄) rw 表示掛載次目錄的客戶機多該目錄有讀寫的權(quán)力 sync:數(shù)據(jù)同步寫入內(nèi)存和硬盤,也可以使用 async,此時數(shù)據(jù)會先暫存于內(nèi)存中,而不立即寫入硬盤 no_root_squash 表示允許掛載次目錄的客戶機有該主機的 root 身份 然 后保存退出。 最后使用 /etc/監(jiān)聽服務(wù),再用 /etc/服務(wù)和端口監(jiān)聽服務(wù) 使之配置生效。 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 12 頁 第四章 嵌入式設(shè)備驅(qū)動程序開發(fā) 編寫 觸摸屏 設(shè)備驅(qū)動程序 Linux 輸入子系統(tǒng) 介紹 在 Linux中,輸入子系統(tǒng)是由輸入子系統(tǒng)設(shè)備驅(qū)動、輸入子系統(tǒng)核心層( Input Core)和 事件輸入層 ( Event Handler)組成。其中設(shè)備驅(qū)動層提供對硬件各寄存器的讀寫訪問和將底層硬件對用戶輸入訪問的響應(yīng)轉(zhuǎn)換為標(biāo)準(zhǔn)的輸入事件,再通過核心層提交 層給事件處理層;而核心層對下提供了設(shè)備驅(qū)動層的編程接口,對上又提供了事件處理層的編程接口;而事件處理層就為我們用戶空間的應(yīng)用程序提供了統(tǒng)一訪問設(shè)備的接口和驅(qū)動層提交來的事件處理。所以這使得我們輸入設(shè)備的驅(qū)動部分不在用關(guān)心設(shè)備文件的操作,而是要關(guān)心對各硬件寄存器的操作和提交的輸入事件。下面用圖形來描述一下這三者的關(guān)系吧! 圖 輸入子系統(tǒng)結(jié)構(gòu)圖 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 13 頁 驅(qū)動程序的實現(xiàn) 原理與 步驟 ( 1) .驅(qū)動程序的實現(xiàn)原理 在 Linux 中, Input 設(shè)備用 input_dev 結(jié)構(gòu)體描述,定義在 中。設(shè)備驅(qū)動的實現(xiàn)步驟: ① . 在驅(qū)動模塊加載函數(shù)中設(shè)置 Input 設(shè)備支持 input 子系統(tǒng)的哪些事件; ② . 將 Input 設(shè)備注冊到 input 子系統(tǒng)中; ③ . 在 Input 設(shè)備發(fā)生輸入操作時,提交所發(fā)生的事件及對應(yīng)的鍵值 /坐標(biāo)等狀態(tài)。 ( 2) .驅(qū)動程序?qū)崿F(xiàn)過程 建立觸摸屏程序 ,首先實現(xiàn)加載和卸載部分,在驅(qū)動加載部分:啟用 ADC 所需要的時鐘、映射 IO 口、申請中斷( 觸摸屏中斷和 ADC 中斷 ) 、初始化輸入設(shè)備、將輸入設(shè)備注冊到 輸入 子系統(tǒng)中。 圖 程序框架圖 源程序見附錄 A 運行程序 燒寫 程序 將編譯好的可執(zhí)行文件下載到目標(biāo)板,我通過在網(wǎng)絡(luò)上收集了資料總結(jié)了以下四種方式: 第一種:使用 U 盤 或者其他可移動設(shè)備 第二種:通過 NFS 直接運行 第三種:通過串口下載文件到開發(fā)板 第四板:通過網(wǎng)絡(luò)下載文件到開發(fā)板 (1) 使用 U 盤 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 14 頁 方法:先把編譯好的可執(zhí)行程序復(fù)制到 U 盤,在 U 盤插到目標(biāo)板上并掛載,然后把程序拷貝到目標(biāo)板的可執(zhí)行目錄 /bin。 (2) 通過網(wǎng)絡(luò)文件系統(tǒng) NFS 執(zhí)行 方法:前提是先按照 節(jié)搭建好 NFS 服務(wù)器系統(tǒng),然后在超級終端中輸入命令 mount –t nfs –o nolock :/home/share /mnt/nfs 為宿主機的 IP 地址 , /home/share 是宿舍機上的共享目錄;/mnt/nfs 是目標(biāo)機上的共享目錄。 這樣就掛載成功了,只要把需要執(zhí)行文件復(fù)制到共享文件中 ,然后再目標(biāo)機的超級終端上執(zhí)行即可。 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 15 頁 第五章 結(jié)束語 本次畢業(yè) 設(shè)計順利完成了 觸摸屏 驅(qū)動開發(fā)的設(shè)計,完成了 畢業(yè) 設(shè)計的基本要求。在本次 畢業(yè) 設(shè)計中, NFS 服務(wù)系統(tǒng)的配置是最基本的東西,雖然從理論上來說不是太難,但是實際操作時遇到了不少問題,不過通過在網(wǎng)上找尋的資料和同老師、同學(xué)的交流下,得到了解答;在設(shè)備驅(qū)動的開發(fā)中,雖然也很難,但是這些東西都 是框架式的,網(wǎng)上很多,只需修改一下,滿足自己的硬件平臺即可。應(yīng)用相當(dāng)來說不是太難,只要注意到一些特有的函數(shù) ,庫文件,問題不是太大。 通過這次畢業(yè) 設(shè)計,對 Linux 中的一些常用命令又回顧了一遍 ,并且也加深了印象,對 Linux 下設(shè)備驅(qū)動程序的開發(fā)也有了基本的認(rèn)識,感覺學(xué)到了很多東西,對不會的知識有一定的了解;對熟悉、學(xué)過的知識又復(fù)習(xí)了一遍,理解更加深刻,也加深了印象。 接下來,我對在這次課程設(shè)計中遇到的問題和解決方法進行個總結(jié): 1. 目標(biāo)板和宿主機不能 Ping 通 解決方法: (1) 看交叉網(wǎng)線是否接觸正常 (2) 檢查開發(fā)板上的網(wǎng)口驅(qū)動是否掛載 (3) 開發(fā)板的 IP 地址必須要和宿主機的 IP 地址在一個 IP 段內(nèi),例如 .*和 .**就在一個 IP 段內(nèi) (4) 關(guān)閉 Linux 的防火墻 2. 使用 NFS 共享目錄時,掛載共享目錄不成功 解決方法: (1) 檢查目標(biāo)板和宿主機是否能 Ping 通(這是基礎(chǔ)) (2) 查看 NFS 服務(wù)和端口監(jiān)聽服務(wù)的狀態(tài)(命令分別是/etc/),如果是關(guān)閉請打開(命令分別是 /etc/) 3. 由于對 Linux 內(nèi)核不熟悉,所以在分析觸摸屏的驅(qū)動代碼時,遇到了不少問題 解決方案: (1) 通過對網(wǎng)上的教學(xué)視頻和資料的學(xué)習(xí),初步了解了其構(gòu)架 (2) 分析代碼中所用到的函數(shù)和宏定義 4. makefile 的編寫問題,經(jīng)常出錯 這個問題不好解決,因為 makefile 文件的編寫比較難,不是短時間能解決的。 在課程設(shè)計中,大的問 題基本上就遇到了這么多,還有很多小問題,在谷歌上一搜就有,關(guān)于技術(shù)方面的問題,最好是在谷歌上搜,感覺比百度全。 總之,我相信有付出就有回報! 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 16 頁 致謝 本課題的研究探討以及論文撰寫一直都是在 雷俊紅 老師的細(xì)心指導(dǎo)下進行的,可以說其中的每個環(huán)節(jié)都傾注了 雷俊紅老師的智慧和心血,在此 表示感謝。 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 17 頁 參考文獻 [1]杜春雷 . ARM 體系結(jié)構(gòu)與編程 . 北京:清華大學(xué)出版社, 2021. [2]張思民 . 嵌入式系統(tǒng)設(shè)計與應(yīng)用 . 北京:清華大學(xué)出版社, 2021. [3]馮國進 . 嵌入式 Linux 驅(qū)動程序設(shè)計從入門到精通 . 北京:清華大學(xué)出版社, 2021. [4]馬忠梅等 . ARM amp。 Linux 嵌入式系統(tǒng)教程 . 北京:北京航空航天大學(xué)出版社, 2021 [5]魏永明等譯 . LINUX 設(shè)備驅(qū)動程序 . 北京:中國電力出版社, 2021 [6]張曉林等 . 嵌入式系統(tǒng)設(shè)計與實踐 . 北京:北京航空航天大學(xué)出版社, 2021 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 18 頁 附錄 A 驅(qū)動源程序 驅(qū)動源程序 /* */ include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ include linux/ include asm/ include asm/ include plat/ include mach/ define S3C2410TSVERSION 0x0101 define WAIT4INT(x) (((x)8) | S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_XY_PST(3)) define AUTOPST (S3C2410_ADCTSC_YM_SEN | S3C2410_ADCTSC_YP_SEN | S3C2410_ADCTSC_XP_SEN | S3C2410_ADCTSC_AUTO_PST | S3C2410_ADCTSC_XY_PST(0)) static char *gt2440ts_name = GT2440 TouchScreen。 static struct input_dev *dev。 static long xp。 static long yp。 static int count。 extern struct semaphore ADC_LOCK。 static int OwnADC = 0。 static void __iomem *base_addr。 static inline void gt2440_ts_connect(void) { s3c2410_gpio_cfgpin(S3C2410_GPG12, S3C2410_GPG12_XMON)。 s3c2410_gpio_cfgpin(S3C2410_GPG13, S3C2410_GPG13_nXPON)。 西安文理學(xué)院 本科畢業(yè)設(shè)計(論文) 第 19 頁 s3c2410_gpio_cfgpin(S3C2410_GPG14, S3C2410_GPG14_YMON)。 s3c2410_gpio_cfgpin(S3C2410_GPG15, S3C2410_GPG15_nYPON)。 } static void touch_timer_fire(unsigned long data) { unsigned long data0。 unsigned long data1。 int updown。 data0 = ioread32(base_addr+S3C2410_ADCDAT0)。 data1 = ioread32(base_addr+S3C2410_ADCDAT1)。 updown = (!(data0 amp。 S3C2410_ADCDAT0_UPDOWN)) amp。amp。 (!(data1 amp。 S3C2410_ADCDAT0_UPDOWN))。 if (updown) { if (count != 0) { xp = 2。 yp = 2。 input_report_abs(dev, ABS_X, xp)。 input_report_abs(dev, ABS_Y, yp)。 input_report_key(dev, BTN_TOUCH, 1)。 input_report_abs(dev, ABS_PRESSURE, 1)。 input_sync(dev)。 } xp = 0。 yp = 0。 count = 0。 iowrite32(S3C2410_ADCTSC_PULL_UP_DISABLE | AUTOPST, base_addr+S3C2410_ADCTSC)。 iowrite32(ioread32(base_addr+S3C2410_
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1