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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,423评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,147评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,019评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,443评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,535评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,798评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,941评论 3 407
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,704评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,152评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,494评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,629评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,295评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,901评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,978评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,333评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,499评论 2 348