在wsl下开发T113的主线linux(4)-编译kernel

本文详细介绍了如何编译全志D1的Linux内核,包括应用补丁、修改配置以及处理设备树以支持T113芯片。尽管内核成功启动,但由于缺少文件系统,系统无法启动成功。

接下来编译kernel,编译过程可能会出现缺少命令的报错,大概是下面这几个

sudo apt update
sudo apt install flex bison bc libncurses-dev

目前linux主线的最新版本并没有适配t113的相关外设驱动,虽然能启动并串口打印,但其他的一些外设并没有驱动,还不是可用的状态,所以这里选择全志D1的kernel进行修改。
GitHub - smaeul/linux at d1/allPatches include sunxi platform support and various driver fixes - GitHub - smaeul/linux at d1/allhttps://github.com/smaeul/linux/tree/d1/all

unzip linux-d1-all.zip
cd linux-d1-all

应用awboot提供的linux补丁

  • linux/allow_select_d1_ccu_on_t113.patch
  • linux/ccu-sun20i-make_cpux_clk_critical_for_t113.patch
  • linux/second_core_support_in_platsmp.patch
  • linux/d1s_t113_can_bus.patch

在arch\arm\configs\sunxi_defconfig中添加D1时钟

CONFIG_SUN20I_D1_CCU=y
CONFIG_SUN20I_D1_R_CCU=y

添加sun8i-t113.dtsi和sun8i-t113-mangopi-dual.dts设备树配置文件到arch\arm\boot\dts\
在arch\arm\boot\dts\Makefile的line:1389 处,CONFIG_MACH_SUN8I配置中添加sun8i-t113-mangopi-dual.dtb

awboot提供的sun8i-t113-mangopi-dual.dts设备树文件调试终端串口是5,需要改成uart0。

make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- sunxi_defconfig
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- zImage -j4
make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabihf- dtbs

xfel spinand write 0x40000 arch/arm/boot/dts/sun8i-t113-mangopi-dual.dtb
xfel spinand write 0x80000 arch/arm/boot/zImage

 

 复位,串口成功打印内核信息,目前spinand中还没有文件系统,所以系统无法启动成功。

[I] AWBoot r6143 starting...
[I] SPI-NAND: W25N01GV detected
[I] SPI-NAND: read dt blob of size 22242 at 43.00MB/S
[I] SPI-NAND: read Image of size 5424416 at 49.00MB/S
[I] booting linux...
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 6.1.0-rc3 (wsl@DESKTOP-NQRKTHB) (arm-none-linux-gnueabihf-gcc (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 12.2.1 20221205, GNU ld (Arm GNU Toolchain 12.2.Rel1 (Build arm-12.24)) 2.39.0.20221210) #7 SMP Fri Dec 30 18:52:12 CST 2022
[    0.000000] CPU: ARMv7 Processor [410fc075] revision 5 (ARMv7), cr=10c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
[    0.000000] OF: fdt: Machine model: MangoPi MQ-Dual
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] cma: Reserved 16 MiB at 0x47000000
[    0.000000] Zone ranges:
[    0.000000]   Normal   [mem 0x0000000040000000-0x0000000047ffffff]
[    0.000000]   HighMem  empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000040000000-0x0000000047ffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000040000000-0x0000000047ffffff]
[    0.000000] percpu: Embedded 11 pages/cpu s15764 r8192 d21100 u45056
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 32512
[    0.000000] Kernel command line: mem=128M ubi.mtd=3 rootfstype=ubifs root=ubi0:rootfs rw rootwait console=ttyS0,115200
[    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes, linear)
[    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes, linear)
[    0.000000] mem auto-init: s
<think>好的,我现在需要帮助用户解决删除位于C:\Windows\System32\WSL2-Linux-Kernel文件夹的问题,并重新从GitHub克隆最新的内核。用户之前已经尝试过使用sudo rm -rf命令但无法删除,我需要仔细分析可能的原因和解决方法。 首先,System32目录是Windows系统的关键目录,通常需要管理员权限才能修改其中的内容。用户可能遇到了权限不足的问题,即使使用了sudo命令,但在WSL中操作Windows系统文件时,权限可能不会完全继承。此外,可能还存在文件被占用的情况,比如系统进程或WSL实例正在使用这些文件,导致无法删除。 接下来,我需要考虑用户提到的引用内容。引用[1]提到了在WSL中复制配置文件的操作,这可能与用户之前编译内核的步骤有关,但当前问题是如何删除旧的内核文件并重新克隆。用户可能需要确保在删除前关闭所有相关的WSL实例,并解除任何文件锁定。 用户的需求是删除旧的内核文件夹并重新克隆,所以步骤需要包括删除旧文件和正确获取最新源码的方法。由于用户无法通过常规命令删除,可能需要更高权限或绕过文件锁定的方法。 可能的解决方案包括: 1. 使用Windows的安全模式启动,以完全释放文件锁定。 2. 使用PowerShell的管理员权限运行命令,绕过WSL的限制。 3. 检查并终止可能占用文件的进程。 4. 使用专门的解锁工具如Handle或Process Explorer。 5. 修改文件夹权限,获取完全控制权。 此外,用户需要重新克隆最新的内核源码,可能需要指导他们正确的GitHub仓库地址和克隆步骤,并确保编译环境正确设置,如引用[3]提到的配置文件的使用。 需要注意,直接操作System32目录风险较高,需谨慎处理,避免系统损坏。同时,确保用户在重新克隆和编译内核时遵循正确的步骤,如使用最新的配置文件和编译工具链。 最后,应该提供预防措施,例如建议将内核源码放在用户目录而非系统目录,避免权限问题,并推荐使用版本控制来管理代码变更。</think>### 分步解决方案:安全删除系统目录内核文件并重新克隆 --- #### **一、前置准备(避免系统损坏)** 1. **创建系统还原点** 右键点击“此电脑” → 属性 → 系统保护 → 配置 → 创建还原点[^1] 2. **备份关键数据** ```powershell # 导出WSL发行版列表 wsl --list --all > C:\wsl_backup.txt ``` --- #### **二、安全删除旧内核文件(突破System32保护)** > **注意**:直接操作`C:\Windows\System32`需极度谨慎,建议优先尝试以下方法: 1. **通过Windows安全模式解除锁定** - 重启时按住`Shift`进入恢复环境 → 疑难解答 → 启动设置 → 启用安全模式 - 在安全模式下执行: ```powershell # 以TrustedInstaller身份获取所有权 takeown /F C:\Windows\System32\WSL2-Linux-Kernel /R /A icacls C:\Windows\System32\WSL2-Linux-Kernel /grant Administrators:F /T /Q Remove-Item -Path C:\Windows\System32\WSL2-Linux-Kernel -Recurse -Force ``` 2. **使用Windows原生工具强制删除** ```powershell # 启动PowerShell(管理员) # 加载NTFS访问模块 Import-Module NTFS # 解除目录保护 Set-ItemProperty -Path C:\Windows\System32\WSL2-Linux-Kernel -Name IsReadOnly -Value $false # 强制删除(比Linux rm更底层) del -Force -Recurse C:\Windows\System32\WSL2-Linux-Kernel ``` 3. **处理顽固文件的特殊方法** - 下载微软官方工具[Process Explorer](https://learn.microsoft.com/zh-cn/sysinternals/downloads/process-explorer) - 搜索文件句柄:`Ctrl+F` → 输入`WSL2-Linux-Kernel` - 强制关闭相关进程后执行删除 --- #### **三、从GitHub获取最新内核源码(正确路径建议)** > **关键建议**:避免将源码放在系统目录,改用用户目录(如`C:\Users\[你的用户名]\wsl-kernel`) 1. **克隆官方仓库** ```powershell # 推荐使用Windows版git(避免WSL文件系统权限问题) cd C:\Users\[你的用户名] git clone https://github.com/microsoft/WSL2-Linux-Kernel.git ``` 2. **验证源码完整性** ```powershell # 检查数字签名(示例) Get-ChildItem -Recurse -Filter *.sig | ForEach-Object { gpg --verify $_.FullName } ``` --- #### **四、编译环境配置优化** 1. **使用微软官方配置模板** ```bash # 在WSL中操作(假设新源码在/mnt/c/Users/yourname/wsl-kernel) sudo cp /mnt/c/Users/yourname/wsl-kernel/Microsoft/config-wsl .config ``` 2. **交叉编译工具链配置** ```bash # 安装必要组件 sudo apt install build-essential flex bison libssl-dev libelf-dev # 指定编译目标 make -j$(nproc) KCONFIG_CONFIG=Microsoft/config-wsl ``` --- #### **五、预防性措施** 1. **文件系统隔离策略** - 在Windows端创建专用工作目录并设置白名单: ```powershell New-Item -Path C:\wsl-build -ItemType Directory icacls C:\wsl-build /grant "NT AUTHORITY\SYSTEM:(OI)(CI)F" ``` 2. **自动化清理脚本** 创建`clean_kernel.ps1`: ```powershell # 强制终止WSL相关进程 Get-Process -Name "wslservice" -ErrorAction SilentlyContinue | Stop-Process -Force # 清理旧编译产物 Remove-Item -Path "$env:USERPROFILE\wsl-kernel\arch\x86\boot\bzImage" -Force ``` --- ### 关键验证步骤 | 操作阶段 | 验证命令 | 预期输出 | |------------------|----------------------------|--------------------------| | 删除完成验证 | `Test-Path C:\Windows\System32\WSL2-Linux-Kernel` | `False` | | 新源码完整性检查 | `git -C C:\Users\yourname\wsl-kernel log -1` | 显示最新commit ID | | 内核编译验证 | `file arch/x86/boot/bzImage` | `Linux kernel x86 boot executable` | --- ### 常见问题解答 **Q1: 删除时报错"需要TrustedInstaller权限"怎么办?** ```powershell # 使用PowerShell获取最高权限 Start-Process powershell -Verb RunAs -ArgumentList "takeown /F C:\Windows\System32\WSL2-Linux-Kernel /R /A ; icacls C:\Windows\System32\WSL2-Linux-Kernel /grant Administrators:F /T" ``` **Q2: 克隆后编译提示缺少头文件?** ```bash # 在WSL中执行(Ubuntu示例) sudo apt install linux-headers-$(uname -r) ``` --- ### 延伸建议 1. **使用符号链接隔离系统目录** ```powershell # 将实际存储位置转移到用户目录 New-Item -ItemType SymbolicLink -Path C:\Windows\System32\WSL2-Linux-Kernel -Target C:\Users\yourname\wsl-kernel ``` 2. **启用内核调试模式** 编辑`Microsoft/config-wsl`: ```config CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_INFO=y ``` --- 通过上述步骤,您可以在保证系统安全的前提下,彻底清理旧内核文件并获取最新代码库。建议后续开发时遵循微软官方推荐的[WSL内核编译指南](https://learn.microsoft.com/zh-cn/windows/wsl/build-custom-kernel)[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值