查看: 3202|回复: 3

【Marvell ESPRESSObin】编译Kernel跑起来

[复制链接]
  • TA的每日心情
    奋斗
    2017-5-23 16:15
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-4-22 20:56:45 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 cruelfox 于 2017-4-23 08:49 编辑

      进展并不是预想的那样顺利。
      没拿到板子之前我以为板子上会附带一个可以启动的文件系统,拿到板子却发现并没有焊接eMMC,需要自己用Micro SD卡来启动。据说前一批的发放附带了一个写好系统的Micro SD卡,我收到的盒子里确实没有带。既然Ubuntu linux支持这个板子,那第一步弄一个现成的系统先跑起来应该不是问题。版上早已经有朋友运行起来并安装软件测试了。
      按照ESPRESSObin wiki网站的链接下载了 ubuntu-base-14.04-core-arm64.tar.gz 这个文件,几十兆不费多少时间。因为我日常主要用的这台电脑是WinXP系统,把SD卡做成Linux文件系统不方便,所以把笔记本电脑拿出来运行Linux. 先解包 ubuntu 这个 tar.gz 文件,发现 boot 目录下面竟然是空的!原来没有包括内核呀。
      印象中 wiki 上没有说从哪里下载内核的文件,只是介绍了怎么编译内核。我又在 wiki 网站找了一次,的确没有。那就不得不改变计划,先自己编译一个内核来用了。需要两样东西:交叉编译的工具链(cross-compile toolchain),因为是在X86的平台上编译出ARM的可执行代码;以及内核的源代码。这两部分怎么获取在 wiki 上已经说了。工具链可以下载到,我已经实现下好了,这回传到我的Linux机器上,然后用tar截开。接下来,先运行一下这里面的 gcc 试试。结果呢,不能执行?我靠,什么情况?
      用 file 看了一下,这是 x86_64 的可执行文件,但我的Linux是32位的啊。呃,本人不折腾Linux已多年,这个系统还是在学校的时候编译的,软件版本都很老了。再上下载URL中的网站找了找,确实没有 i686- 的版本啊。只好远程登陆到办公室的linux机器上去编译了,那机器的系统是64位的。SSH把文件传过去,解包,试 gcc,又出现意外了!GLIBC的版本不支持。公司的linux软件版本也老了啊,但我没有root权限不能升级,作罢。
      在我的笔记本上再装一个64位的Linux发行版?也很折腾。那么就自己编译一套 Cross-compiler 吧。我玩Linux是使的 LFS (Linux From Scratch),该网站上介绍各种软件如何从源代码编译介绍得比较充分。其中一个分支是 CLFS,介绍交叉编译系统。可惜今天CLFS的服务器有点问题,只好搜索引擎找一下了。参考制作交叉工具链的步骤 http://clfs.org/view/clfs-embedded-0.0.1/arm/cross-tools/chapter.html
      我选择了 GCC 5.2.0 版本( ESPRESSObin wiki 网站下载链接的编译好的工具链是 5.2.1 版本,接近),在 LFS 7.8 版本中可以找配套使用的 Binutils, GMP, MPFR 等软件包 http://ftp.osuosl.org/pub/lfs/lfs-packages/7.8/  

      交叉工具链有两个主要组成部分:汇编及连接工具(binutils)和C语言编译器(GCC),因为目的是编译内核而不是应用程序,就省去了GLibc. 先编译 binutils-2.25.1, 参考CFLS中的步骤:
    第一步是configure, 执行
    $./configure --prefix=/cross-tools/ --target=aarch64-linux-gnu --with-sysroot=/cross-tools/arm64 --disable-nls --disable-multilib
    因为是交叉编译,必须要指定 --target=aarch64-linux-gnu 参数。然后编译:
    $ make configure-host
    $ make

    没问题就可以安装了(已指定安装到 /cross-tools 目录下)
    $ make install

    然后编译 GCC, 需要 gcc, mpfr, mpc, gmp 四个软件包。其中后三个要释放到 gcc 的源码目录下,重命名去掉版本号。
    也是先configure, 执行
    $ ./configure --prefix=/cross-tools --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=aarch64-linux-gnu --with-sysroot=/cross-tools/arm64 --disable-nls --disable-shared --without-headers --with-newlib --disable-decimal-float --disable-libgomp --disable-libmudflap --disable-libssp --disable-libatomic --disable-libquadmath --disable-threads --enable-languages=c --disable-multilib --with-arch=armv8-a
    然后就编译和安装:
    $ make all-gcc all-target-libgcc
    $ make install-gcc install-target-libgcc


    接下来终于可以按照 wiki 中的步骤编译内核了。
    kernelprep.PNG
    内核编译过程比较长,从输出的信息看来,许多不需要的模块都被选择了。
    呃,出错了!重新make, 确定出错位置
    stuberror.PNG
    在 efi/libstub 这里出了问题。不知道是编译器的问题还是我的Linux的问题还是配置的问题。现在考虑怎么跳过去,EFI? 需要吗?重新 make menuconfig 一下,在主菜单 "Boot Options" 进去,把 "UEFI runtime support" 关掉试试看吧。
    bootopt.PNG
    然后再make,等待…… pass了,查看下生成的文件。
    image.PNG

    把内核文件和 .dtb 文件都复制到Micro SD卡上,准备启动板子。u-boot上面的命令就按照wiki的来,先不管什么含义了。
    boot.PNG
    编译的内核成功运行了,后面的信息中看到 Ubuntu 的初始化也执行了,不过有一点问题:最后没有出现登陆界面
    final.PNG

    后来查到问题了,是在编写 ttyMV0.conf 的时候 copy-paste 丢了第一行首字母s.
    改正后就能登陆root shell了。


    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-23 16:15
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-4-23 09:09:12 | 显示全部楼层
    登陆系统
    shell.PNG
    连上网线,绿灯亮。设置eth0,  dhcp获取不到IP地址。
    另外又尝试手动分配IP, 也不行,ping不通。这种带交换机的网口以前没配置过,怎么搞呢?再研究下。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-7-19 10:35
  • 签到天数: 8 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2017-4-23 09:46:30 | 显示全部楼层
    cruelfox 发表于 2017-4-23 09:09
    登陆系统

    连上网线,绿灯亮。设置eth0,  dhcp获取不到IP地址。

    ETH0是个交换芯片,WAN才是具体的端口,用ifconfig wan 0 up && dhclient wan来获取IP
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-23 16:15
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

     楼主| 发表于 2017-4-24 09:30:30 | 显示全部楼层
    netlhx 发表于 2017-4-23 09:46
    ETH0是个交换芯片,WAN才是具体的端口,用ifconfig wan 0 up && dhclient wan来获取IP ...

    恩,是的。我发现了,三个网口是 wan, lan0, lan1
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-26 02:08 , Processed in 0.146051 second(s), 22 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.