你執行 petalinux-config -c kernel 時,出現以下錯誤:
PermissionError: [Errno 1] Operation not permitted
...
with open("/proc/self/uid_map", "w") as f:
問題原因:
這是 BitBake 嘗試在 unprivileged 使用者(非 root)下操作 /proc/self/uid_map 時觸發的權限錯誤。這通常發生在使用 unprivileged user namespaces 或 rootless builds 的情況下。
Petalinux(或 Yocto/BitBake)在某些操作(如 bitbake-worker 中的 disable_network)會寫入 /proc/self/uid_map,但該操作需要具備 CAP_SETUID 能力或使用者具有特定權限。
---
解法建議:
✅ 方法一:使用 sudo 執行命令
最簡單的方式是改用 root 權限執行該命令:
sudo petalinux-config -c kernel
這能繞過 unprivileged namespace 的限制,避免 BitBake 嘗試執行需要 root 權限的操作失敗。
---
✅ 方法二:允許使用者寫入 uid_map(不建議,安全風險高)
這個方法涉及修改 /proc/sys/kernel/yama/ptrace_scope 或設置 unprivileged user namespace 權限,但通常不建議在開發機上進行,尤其是非虛擬環境。此處列出作為參考:
sudo sysctl -w kernel.unprivileged_userns_clone=1
或者(不推薦)降低 Yama 安全機制:
sudo sysctl -w kernel.yama.ptrace_scope=0
---
建議做法:
最推薦的方法是 使用 sudo 執行 petalinux-config -c kernel,因為 Petalinux 編譯與 BitBake 操作往往涉及很多低階系統功能,需要適當的權限來成功執行。
---
進階建議:
若你使用的是虛擬機、Docker 或容器環境,也要特別注意是否有開啟 userns(user namespace)功能,這會限制權限。