參考 add_arm_linux_new_syscall.patch, 值得注意的是 L10 從 388 改成 392, 奇怪, 不是才加入一個 system call 到 calls.S 嗎? 怎麼不是 389?? 大栽問?
原因是 arch/arm/kernel/entry-common.S, arch/arm/kernel/calls.S 在計算 a.c L1043~L1045, 沒符合程式邏輯罷了, 解決方法很簡單, 拿到這段檢查程式就好了, 優雅的方法就是去計算其規則, 讓結果符合這個檢查, 392 就是我算出的結果。
cpp.sh L1 是我將 arch/arm/kernel/entry-common.S 展開, L2 是單純的用 as compile, 照著規則算出來看多少才會過關。
add_arm_linux_new_syscall.patch L113 我用了可以傳入一個參數的 macro, 可以參考其它的 system call 看看如何使用不同參數的版本, ex: SYSCALL_DEFINE3。system call 並不是表面上看的那麼單純, 我認為只有實作過才真的能理解它, 否則你只是停留在理論的理解。
test_my_syscall.c 用來呼叫這個 new system call, 這是把 mmu ttbr0 印出來, 我本來想解開 linux mmu 位址轉換的祕密, 很可惜失敗了。
沒有留言:
張貼留言
使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。
我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。