LicheePi-zero搭建过程

荔枝派开发环境搭建过程

一、前言

笔者最近为了熟悉 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搭建过程)