美文网首页
LicheePi-zero搭建过程

LicheePi-zero搭建过程

作者: wipping的技术小栈 | 来源:发表于2019-11-10 17:29 被阅读0次

    荔枝派开发环境搭建过程

    一、前言

    笔者最近为了熟悉 neon 以及 arm汇编 这些指令集,打算搭建一个在下 arm 下的开发环境,但考虑使用qemu始终不如真实环境好用,机缘巧合之下发现有一个尘封已久的荔枝派,那么打算用荔枝派开发板做来作为实验环境,顺便为后面玩玩驱动做准备。
    事前准备如下:

    • 虚拟机:ubuntu18.04()
    • 开发板:荔枝派zero

    二、搭建过程

    2.1 安装编译工具链

    从下面的链接中下载交叉编译链,笔者使用的是7.4.1版本

    https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/

    安装工具链的过程相对简单,笔者不多赘述,其工作主要是下载、解压、设置环境变量

    2.2 uboot

    1. 荔枝派的uboot可以直接从网址中使用git拷贝下来,建议参考荔枝派的wiki来进行

    https://github.com/Lichee-Pi/u-boot.git

    1. 使用下面的指令将 uboot 拷贝到本地

    git clone https://github.com/Lichee-Pi/u-boot.git -b v3s-current

    1. 然后进入目录使用下面指令来编译uboot

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- LicheePi_Zero_defconfig#默认配置
    make ARCH=arm menuconfig#进入配置菜单,如果没有额外需求可以不使用该命令
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12#生成uboot-with-spl.bin

    如果没有意外,应当此时可以生成一个uboot-with-spl.bin

    2.2 linux

    为了能够使用网卡驱动进行网络通信,笔者选择了4.14-y的版本,该版本支持网卡驱动

    1. 从github上 https://github.com/Lichee-Pi/linux.git 下载linux

    git clone https://github.com/Lichee-Pi/linux.git -b zero-4.14.y

    1. 进入目录并配置编译选项

    make CROSS_COMPILE=arm-linux-gnueabihf- ARCH=arm licheepi_zero_defconfig

    1. 为linux配置网卡驱动

    使用 make ARCH=arm menuconfig

    然后进入以下目录,就可以看到全志的网卡GMAC使能选项了,将其选上

    ->Device Drivers
        ->Network device support
            ->Ethernet driver support
            ->STMicroelectronics devices
                ->STMicroelectronics 10/100/1000/EQOS Ethernet driver
    
    1. 修改设备树,在你使用的设备树下增加下面的代码,笔者使用的是sun8i-v3s-licheepi-zero.dts
    &emac {
        phy-handle = <&int_mii_phy>;
        phy-mode = "mii";
        allwinner,leds-active-low;
        status = "okay";
    };
    
    1. 编译linux内核,一般情况下会生成设备树,如果没有则使用第二条命令

    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j12
    make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs#编译设备树

    1. 编写boot.cmd启动脚本,然后使用工具生成boot.src。其中your_dtb是使用的设备树,笔者使用的是sun8i-v3s-licheepi-zero.dtb

    your_ubootpath/tool/mkimage -C none -A arm -T script -d boot.cmd boot.scr

    #boot.cmd
    setenv bootargs console=tty0 console=ttyS0,115200 panic=5 rootwait root=/dev/mmcblk0p2 rw
    setenv bootm_boot_mode sec
    load mmc 0:1 0x41000000  zImage
    load mmc 0:1 0x41800000  your_dtb
    bootz 0x41000000  - 0x41800000
    

    2.3 文件系统

    笔者使用的是 buildroot来构建文件系统,简单又快捷

    1. 下载buildroot并解压

    wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz

    1. 为了方便一点,笔者这里使用了荔枝派提供的配置,下载下面的配置并拷贝到buitroot下命名为.config

    https://fdvad021asfd8q.oss-cn-hangzhou.aliyuncs.com/migrate/buildroot.config

    1. 进入buildroot目录,选择需要的配置,关于buildroot如何配置请自行查阅资料

    make menuconfig

    配置时需要查看linux的内核版本,可以直接查看linux的Makefile,开头就是。
    这里笔者使用了自定义工具链选项,填入工具链地址(路径到gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf即可,不需要进入bin目录),工具链前缀arm-linux-gnueabihf,不需要带横杆
    CPU内核选择对应的版本, ABI选择编译工具链对应的版本比如, 浮点策略选择VFPv4

    1. 为了省去不必要的下载操作,使用该版本的buildroot并配置dl包可以省去下载软件的工作,链接如下, 下载解压后放在buildroot下并命名为dl

    https://pan.baidu.com/s/1_tBdX9K7fOkH9JdXZ_MdiQ

    1. 编译,直接 make 即可,注意环境变量 LD_LIBRARY_PATH 不能被改写。编译时需要等待一段时间,生成的文件在 output/images/rootfs.tar

    2. 如果发生下面的错误,需要修改ext4文件系统的生成包大小

    Could not allocate block in ext2 filesystem while populating file system

    2.4 分区烧录

    到下面的链接下查看脚本 write_all.sh即可知道分区烧录的方法

    https://github.com/Zepan/ilichee/tree/master/资源文件/镜像烧写

    2.5 使用SSH

    1. 在buildroot中选择下面的选项,生成ssh
    System configuration  --->
        (Aplex) System hostname
            (Welcome to Aplex) System banner
    
    [*] Enable root login with password
        Target packages  --->
            Networking applications  --->
                [*] openssh
    
    1. 找到 /etc/inittab 文件,将下面的代码

    console::respawn:/sbin/getty -L console 0 vt100 # GENERIC_SERIAL

    修改为

    console::respawn:-/bin/sh

    修改之后需要重启

    1. 发生下面错误,并一直无法登录

    WARNING: Your password has expired. You must change your password now and login again!

    使用下面的命令

    cat /etc/shadow

    如果出现下面的情况则会登录无效

    root:$1$m.jegaqA$vA.rBTVryyUAcRvyZ2gOL1:0:0:99999:7:::
    
    telnetd:$1$N4uZUEcU$yotoDExxgGXs6PE7PQuIR1:0:0:99999:7:::
    
    honey:$1$SwtHyL/h$MsEX6Vnqz/qhwDsivDqD20:0:0:99999:7:::
    
    sshd:$1$elylgRon$FOHgkwpPMcNI5s.iL8ZS/.:0:0:99999:7:::
    

    需要手动修改为

    root:$1$m.jegaqA$vA.rBTVryyUAcRvyZ2gOL1:15695:5:99999:7:5:20000:
    
    telnetd:$1$N4uZUEcU$yotoDExxgGXs6PE7PQuIR1:15695:5:99999:7:5:20000:
    
    honey:$1$SwtHyL/h$MsEX6Vnqz/qhwDsivDqD20:15695:5:99999:7:5:20000:
    
    sshd:$1$elylgRon$FOHgkwpPMcNI5s.iL8ZS/.:15695:5:99999:7:5:20000:
    
    1. 如果SSH无法登录,请尝试修改ip地址

    2.6 尝试搭建gef环境

    gef是调试工具gdb的增强脚本,笔者尝试在荔枝派上搭建该开发环境,但最后失败了,不过还是记录下这其中的经历,以便各位遇到类似问题的读者可以查询

    1. 在buildroot下使用选择python3并编译生成

    2. 将buildroot生成的python头文件pyconfig.h拷贝编译器的头文件检索路径

    编译器头文件检索路径: your_compiler_path/lib/gcc/arm-linux-gnueabihf/7.4.1/include/
    头文件路径:buildroot/output/build/python3-3.6.1/pyconfig.h

    libpython3.6m的动态库和静态库拷贝编译器的库文件检索路径

    编译器库文件检索路径: your_compiler_path/lib/gcc/arm-linux-gnueabihf/7.4.1/
    路径:buildroot/output/build/python3-3.6.1/libpython3.6m.*

    使用下面命令查询编译器头文件和库的搜索路径

    echo 'main(){}'|arm-linux-gnueabihf-gcc -E -v -

    COMPILER_PATH 表示的头文件检索路径, LIBRARY_PATH表示的是库文件检索路径,这 2 个都是环境变量

    1. 下载 gdb 源码,并解压

    2. 使用下面命令进行配置,最后的 -with-python=python3 非常重要,gef 是python脚本,需要让gdb支持python

    ./configure --host=arm-linux-gnueabihf --prefix=your_install_path -with-python=python3

    1. 编译gdb,将gdb通过网络文件系统来执行

    2. 最后笔者使用gef增强脚本时,python缺少很多库,这里提供pip安装的思路,使用下面的语句下载相关的包

    wget --no-check-certificate https://pypi.python.org/packages/source/s/setuptools/setuptools-19.6.tar.gz#md5=c607dd118eae682c44ed146367a17e26

    wget --no-check-certificate https://pypi.python.org/packages/source/p/pip/pip-8.0.2.tar.gz#md5=3a73c4188f8dbad6a1e6f6d44d117eeb

    分别是 setuptoolspip,将 2 者通过 nfs 在开发板上访问

    1. 在开发板上进入这 2 个工具的解压目录,并执行下面的语句

    python3 setup.py build

    python3 setup.py install

    1. 修改下面文件

    vi /etc/resolv.conf

    添加腾讯的dns服务器

    nameserver 119.29.29.29
    nameserver 182.254.116.116
    
    1. 使用date修改系统时间,因为 pip 安装会校验时间
    date -s year-month-day
    date -s hour:minute:second
    
    1. 通过pip3下载相应的包,但这里因为荔枝派的内存太小,pip安装的过程需求的内存太大,无法通过 pip 来安装相应的包,即使使用了选项--no-cache-dir也不行。笔者尝试通过手动编译python包,但目前没有找到解决办法,如果有读者知道方法,还请不吝赐教

    参考链接

    《添加ssh》 https://blog.csdn.net/weixin_30546933/article/details/95322998
    《Python交叉编译》https://blog.csdn.net/c1194758555/article/details/73888960
    《交叉编译工具链中库和头文件的搜索路径》https://blog.csdn.net/laoyouji/article/details/100112958
    《安装pip3》https://www.cnblogs.com/jadexia/p/7797791.html
    《荔枝派官方wiki》 zeor.lichee.pro
    《荔枝派官方wiki》 nano.lichee.pro

    相关文章

      网友评论

          本文标题:LicheePi-zero搭建过程

          本文链接:https://www.haomeiwen.com/subject/hruabctx.html