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