驅動 3 2核心空間和使用者空間的資料互動

2021-10-07 03:22:32 字數 1108 閱讀 4027

write(fd,buf,len)//呼叫核心中的磁碟驅動程式將使用者空間buf中的資料寫入到磁碟裝置

read(fd,buf,len)//呼叫核心中的磁碟驅動程式將磁碟中的資料寫入到使用者空間的buf

原則:

1)使用者空間**不能訪問核心空間資料

2)核心空間**也不直接訪問使用者空間資料

訪問前先做許可權檢查 再找做讀寫操作

核心中提供的間接訪問使用者空間資料的api:

#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 ...