最近研究qq2440,想做水下機械人的位姿檢測,用linux需要對裝置驅動程式設計,學了學,挺麻煩的,麻煩在編譯和載入上,在網上找到乙個例子不錯,抄下來備用。
pc機上的:
obj-m := hello.o
kerneldir := /lib/modules/$(shell uname -r)/build
default:
make -c $(kerneldir) m=$(shell pwd) modules
install:
insmod hello.ko
uninstall:
rmmod hello.ko
clean:
make -c $(kerneldir) m=$(shell pwd) clean
arm上的:
obj-m := hello.o
kerneldir :=/opt/friendlyarmqq2440/ghcodes/kernel-2.6.13 #對應到自己開發板得核心目錄
default:
make -c $(kerneldir) m=$(shell pwd) modules
install:
insmod hello.ko
uninstall:
rmmod hello.ko
clean:
make -c $(kerneldir) m=$(shell pwd) clean
兩者的區別僅僅在核心目錄上,這個問題是後來才研究明白的,因為之前核心配置上的錯誤導致了很多問題,在網上找到一些解決方法,一一解決了,現在想總結時卻發現都忘了是什麼問題了,只記得最後的時候insmod hello.ko時出現如下錯誤:
version magic '2.6.14.7 armv4 gcc-3.4' should be '2.6.14.7 preempt armv4
gcc-3.4'
insmod: cannot insert `st7565p_driver26.ko': invalid module format (-1): exec format error
上網搜資料,找到解決辦法:
該文章中,用了其中的如下操作:
我用的是make menuconfig.
注意:您的核心必須已啟用這些選項進行了編譯,用以支援模組的動態載入。
(用make menuconfig調出核心配置選單):
loadable module support --->
enable loadable module support
module unloading
[ ] module versioning support (experimental)
automatic kernel module loading
注:該步沒做時,在make modules時將出錯。
kernel feautre -> preemptible kernel
配置完後重新make,然後就能在arm端成功執行!
linux裝置驅動程式 字元裝置驅動程式
先留個 有一起學習驅動程式的加qq295699450 字元裝置驅動 這篇比較惱火。載入成功,但是讀不出來資料,有知道怎麼回事的,留個言,一起討論下 資料結構 struct scull mem struct scull dev dev 整個驅動程式 如下 include include include...
Linux裝置驅動程式 字元裝置驅動程式
1.檢視主裝置號,次裝置號 進入 dev目錄執行ls l,第四,五列分別為主次裝置號,10,180,1,5,這些是主裝置號,而60,63這些就是次裝置號 130 shell android dev ls l crw rw r system radio 10,60 1969 12 31 21 00 a...
Linux裝置驅動程式
linux系統中的裝置分為字元裝置 char device 塊裝置 block 和網路裝置 net device 三種,字元裝置是指在訪問時沒有快取,能夠像檔案一樣被訪問的裝置,字元裝置驅動程式至少要實現open close read和write系統呼叫。多數的linux裝置驅動程式可以在核心模組發...