Linux下把kernel空間對映到使用者程序空間

2021-04-09 01:00:49 字數 930 閱讀 4538

在mmap函式裡,使用

remap_pfn_range函式。**如下。注意要設定一下vma->vm_pgoff為你要map的io空間的實體地址對應的頁。

arm  io/ 記憶體統一編址  所以

#define io_remap_pfn_range(vma,from,pfn,size,prot) /

remap_pfn_range(vma, from, pfn, size, prot)

vm_start, vm_end  在系統呼叫時算好了,應該時找個空閒得空間,然後根據size算出vm_end,

static int filter_mmap(struct file *filp, struct vm_area_struct *vma)

map 過程 :

使用者空間map(start,offset, len , fd ,...)   start 對映到的使用者空間位址,0就是自己去找吧,offset 檔案的偏移。 

old_mmap(struct mmap_arg_struct __user *arg)      // arch/arm/kernel/sys_arm.c

|do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> page_shift);

|do_mmap_pgoff(file, addr, len, prot, flags, pgoff);   //   mm/mmap.c

可能合併vma

否則新分配乙個vma

然後error = file->f_op->mmap(file, vma);

就呼叫了驅動裡的mmap     

這時候vma->vm_pgoff = pgoff    (這個pgoff就是map(offset, len , fd ,...)  中的 offset ,當然經過處理了,page_shift移來移去的)

將firmware編譯進kernel空間

法2 kernel 4.14版本方法 kernel原本就是支援將firmware編譯進核心的。早些年,用的比較多的是方法一。這也就導致了kernel裡面多了很多firmware檔案,這些檔案對於kernel原始碼來說。不適合放在release版本裡面。使用者自己需要時新增比較合適。所以有了下面兩個修...

kernel 下檢視時鐘頻率

例如 檢視畫素時鐘 cd dcu pix cat clk rate 得到畫素時鐘大小為 150m 150000000檢視 can 時鐘 cd can0 cat clk rate 該值應該是預設值,說明該 can 的時鐘還未做其他配置 132917888path u boot arch arm cpu...

linux下,把螢幕豎起來

現在的筆記本大都是寬屏的,對於看電影來說確實很過癮,螢幕更寬,利用的就更多。但是對於閱讀和上網來說就有點悲劇嘍!不過翻轉之後螢幕是轉過來了,但是觸控板卻沒有變 滑鼠向左!啊?你怎麼跑到上面去了?糟糕!根本沒有辦法用觸控板準確的 定位滑鼠 不過沒關係,我們可以裝乙個小外掛程式 然後重新啟 形介面,或者...