iTop-4412配置内核开发环境

虽然理论上开发板拿过来就可以使用,但如果正确配置环境,可以大大提高开发效率,事半功倍。

搭建内核编译环境

  1. 使能32位程序支持

    因为交叉编译器为32位程序,因此需要安装32位动态库。

    1
    2
    sudo dpkg --add-architecture i386
    sudo apt install lib32z1 lib32ncurses6 lib32stdc++6
  2. 安装交叉编译器

    1
    2
    3
    4
    5
    6
    7
    8
    # Download prebuilt toolchain
    wget https://github.com/colorfulshark/arm-2009q3/archive/refs/heads/master.zip
    unzip master.zip
    mv arm-2009q3-master arm-2009q3

    # install to target directory
    sudo mkdir /usr/local/arm
    sudo mv arm-2009q3 /usr/local/arm/
  3. 克隆内核源码

    1
    git clone https://github.com/colorfulshark/iTop4412_Kernel_3.0.git
  4. 编译内核

    1
    2
    3
    # setup default config
    cp config_for_linux_9.7 .config
    make
  5. 刷写内核

    1
    2
    3
    4
    5
    6
    # execute in uboot
    fastboot

    # execute in host
    sudo fastboot flash kernel arch/arm/boot/zImage
    sudo fastboot reboot

搭建文件系统编译环境

这里使用Buildroot构建文件系统,因为其对老内核的支持较好。

  1. 克隆代码

    1
    2
    git clone https://gitlab.com/buildroot.org/buildroot.git
    cd buildroot
  2. 配置Buildroot

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    make menuconfig

    Target options:
    Target Architecture: ARM (little endian)
    Target Architecture Variant: cortex-A9

    Toolchain:
    C library: musl
    Kernel Headers: Manually specified Linux version
    linux version: 3.0.15
    Custom kernel headers series: 3.0.x
  3. 构建Buildroot

    1
    make
  4. 解压rootfs

    1
    sudo tar -xf output/images/rootfs.tar -C /rootfs

设置NFS Boot网络启动

使用NFS挂载根文件系统可以减少文件传输操作,提高开发效率,这里使用Buildroot作为根文件系统。

  1. 配置NFS服务器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    sudo apt install nfs-kernel-server

    sudo vim /etc/exports

    >>>
    /rootfs *(rw,sync,no_root_squash)
    <<<

    sudo systemctl restart nfs-kernel-server
  2. 配置内核选项

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Networking support:
    Networking options:
    IP: kernel level autoconfiguration:
    IP: DHCP support: Y
    IP: BOOTP support: Y
    IP: RARP support: Y

    File systems:
    Network File Systems:
    NFS client support:
    NFS client support for NFS version 3: Y
    Root file system on NFS: Y

    Boot options:
    Default kernel command string: "root=/dev/nfs nfsroot=192.168.0.1:/rootfs,proto=tcp,vers=3 rw ip=192.168.0.2:192.168.0.1:192.168.0.1:255.255.255.0:itop4412:eth0:off init=/linuxrc console=ttySAC2,115200 lcd=9.7"
  3. 调试NFS启动问题

    如果内核无法挂载NFS根文件系统,可以使用以下内核cmdline进行调试

    • nfsrootdebug: 启用NFS Root调试日志
    • rootdelay=N: 等待N秒后再挂载文件系统
    • rootwait: 等待root出现后再挂载

参考

https://blog.csdn.net/ComputerInBook/article/details/107575590

https://blog.colorfulshark.net/2020/08/23/setup-linux-2-6-system-from-scratch.html