※ 引述《willy01 (網洋中的一條狗)》之銘言:
: 大家好~
: 想要請問一下 最近在build android5.0 搭配 新的3.10 kernel內核
: 之前在舊個Android4.3 前輩有寫份tool
: 主要是用mmap把底層的physical address映射到user space
: 讓AP程式可以存取到hardware 存到記憶體的值 (類似driver)
: 主要code大概為
: fd = open("/dev/mem",O_RDWR | O_SYNC);
: map_address = mmap( (caddr_t)0 , size,
: PROT_READ|PROT_WRITE,MAP_SHARED,fd,(off_t)phy_base_address );
: 其中
: size=40* getpagesize(); //getpagesize=4096 byte
: phy_base_address= 0xd80a0000 ; // GPU mmio base
: 在之前的版本可以正常work 但換到 ndroid5.0 搭配 新的3.10 kernel內核
: 則會回傳errno 22 (invalid argument)
: 但確認過兩個size和phy_base_address的都是為 pagesize的整數倍
: 一開始以為是SELINUX的權限 使AP不能用MMAP存取記憶體
: 但關掉SELINUX後 好像還是無法存取
: 網路上有看到一個說法是說
: 新的內核對 /dev/mem做了一些限制 導致不能映射了
: 不知有無有經驗的高手
: 可以提供一個大概方向 讓我可以繼續解掉這問題?
: 非常感謝大家看完
STRICT_DEVMEM=n
如果是X86的話,要在加
X86_PAT=n