write(fd,buf,len)//呼叫核心中的磁碟驅動程式將使用者空間buf中的資料寫入到磁碟裝置
read(fd,buf,len)//呼叫核心中的磁碟驅動程式將磁碟中的資料寫入到使用者空間的buf
原則:核心中提供的間接訪問使用者空間資料的api:1)使用者空間**不能訪問核心空間資料
2)核心空間**也不直接訪問使用者空間資料
訪問前先做許可權檢查 再找做讀寫操作
#include
unsigned
long __must_check copy_to_user
(void __user *to,
const
void
*from,
unsigned
long n)
;unsigned
long __must_check copy_from_user
(void __user *to,
const
void
*from,
unsigned
long n)
;
to,目標位址 該位址應該介於0-3g範圍內
from,源資料位址
n,連續操作的位元組數
返回值,拷貝失敗的位元組數
練習:
通過write函式向myleds裝置寫入1滅燈,寫入0亮燈
通過read函式讀取燈的亮滅狀態
實驗步驟:
cp 01 02 -r
cd 02
vi test.c
vi led_drv.c
make
arm-cortex_a9-linux-gnueabi-gcc test.c -o test
cptest
../../rootfs/
在開發板上執行
rmmod led_drv
nsmod led_drv.ko
mknod /dev/myleds c 244 5
./test on
./test off
使用者空間和核心空間
應用程式是從頭到尾執行單個任務。模組只是預先註冊自己以便服務於將來的某個請求,模組初始化函式的任務就是為以後呼叫模組函式預先做準備,就像模組說 我在這,並且我能做這些工作。模組的退出函式將在模組被解除安裝前呼叫,他告訴核心 我要離開了,不要再讓我做任何事了。應用程式在退出時,可以不管資源的釋放或其他...
Linux核心空間和使用者空間
在linux系統中存在程序的概念 程序的分類 使用者程序 執行在使用者空間的程序被稱為使用者程序 核心程序 執行在核心空間的程序被稱為核心程序 程序的空間 系統會為每乙個程序分0 4g的虛擬定址空間,在4g的空間中 0 3g 屬於使用者空間,用來執行使用者的相關程序 3 4g 屬於核心空間,用來執行...
核心空間和使用者空間的分界 PAGE OFFSET
page offset 記憶體對映 使用者空間 核心空間 物理 a 0 1g b 3g c 4g b 定義為 page offset 0 1g 和核心空間又有豐富的內容,我還沒有整理,以後再說。arch x86 include asm page types.h define page offset ...