MyFPGA Forum

标题: HPS linux 内核编译 [打印本页]

作者: matthew_wang    时间: 2014-8-28 09:19
标题: HPS linux 内核编译
本帖最后由 matthew_wang 于 2016-5-27 17:16 编辑

由于研发任务加上刚出差回来,这篇文档delay了一段时间。在此表达歉意,这里介绍如何编译SD Card的image。这里并没有太多的原理需要讲述,但是大多数刚刚接触到linux 嵌入式的朋友还是需要花些时间找编译方法。这里提供了为SoCFPGA编译内核的整个流程。
本人的编译环境:Ubuntu 12.10(说明:本人是使用root登陆执行所有命令的,所以我的命令不涉及到执行权限的问题,如果大家自己嫌每次都需要使用sudo很麻烦,也可以想办法使用root登陆,当然操作不当可能引起系统当机)
编译之前有三点工作需要做:1、 安装交叉编译链。 2、 安装git工具。 3、 下载内核源码。
交叉编译链在前面已经提过,这里直接说在linux 上安装的方法。安装前得从网上下载安装文件,我们选择linaro组织提供的arm-linux编译链,linaro也在定时更新。https://launchpad.net/linaro-toolchain-binaries/trunk/  这里会列出每次发布出来的交叉编译下载地址。目前最新的版本是2013.10版。
在terminal 中输入
wget https://launchpad.net/linaro-too ... 13.10_linux.tar.bz2 下载编译链。(这里下载的位置可以任意,最好是新建一个专门的文件夹,免得乱了,我这里使用 /blog/toolchain 目录作为范例)
完成后需要对文件解压,解压命令为: tar jxvf gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux.tar.bz2
然后再终端中输入 export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf-
这样交叉编译链安装就算完成了。

接下来就是安装git工具了。git 是类似于svn 的版本控制工具了。他的开发者就是linux内核的发明者linus torvalds。关于git 的安装可以参考 http://www.douban.com/note/263056199/ 这个链接的源码安装方法。安装完成后输入git --version 命令可以查看到 git version 1.x.x的信息说明安装成功了。(在ubuntu 环境下也可以使用apt-get install git 命令安装git 工具)

后面的工作就是从rocketboards的git 仓库中获取linux 的源码了。
git clone gits://git.rocketboards.org/linux-socfpga.git (此链接失效,16年5月更新)
  altera 的source code仓库已经搬到了https://github.com/altera-opensource/linux-socfpga.git 可以在浏览器中看到版本信息
cd linux-socfpga
git checkout -b kenel_3.12 origin/socfpga-3.12
(这里kernel 3.12可以任意命令, origin/socfpga-3.12 表示远程版本信息,Altera 从3.7版本开始都有上传到git server上。用户可以用 git branch -r 查看远程的版本号,目前最新的版本已经到3.14)
这样内核源码就已经获取完成。

接下来就是内核编译了。依次执行下面的命令
export CROSS_COMPILE=/blog/toolchain/gcc-linaro-arm-linux-gnueabihf-4.8-2013.10_linux/bin/arm-linux-gnueabihf- (前面有执行过此处可以不用再执行)
make ARCH=arm socfpga_defconfig
make ARCH=arm zImage LOADADDR=0x8000
此时可以在内核的arch/arm/boot下看到刚编译出来的zImage文件。可以替换掉Boot SD card中的zImage文件后插入板上boot。
另外可以执行make dtbs 命令,会在arch/arm/boot/dts 目录中找到socfpga_cyclone5.dtb文件。将此文件更名为socfpga.dtb替换掉SD卡中的dtb文件也可以参与boot。
当然这里的dtb文件并不是完全符合DE1_SoC的板级描述,后面会介绍具体作些修改动作。
当然很多人对于dts文件的作用并不是那么清楚,后面也会根据frame_buffer的image编译和相关源码分析dts文件及在内核驱动中如何使用。



如果有多次编译内核的需要,不每次打开电脑或者终端输入export 环境变量的方式比较麻烦,这里介绍每次打开终端自动添加环境变量的方法:
使用编辑器打开 /etc/profile,在文件末尾添加语句
export CROSS_COMPILE=arm-none-linux-gnueabi-
export ARCH=arm
export LOADADDR=0x8000

这样在编译内核时候直接执行下面两条命令
make socfpga_defconfig
make zImage

即可编译内核

作者: sh200436    时间: 2015-6-11 13:57
您好版主,我买了一块DE1-SOC的板子,正在学习中,有这么几个疑问:
1、  make ARCH=arm zImage LOADADDR=0x8000
--LOADADDR 这个参数是什么意思?地址是0x8000, 还是0x80000?  我按照上面的步骤,生成了zImage文件,不能用。

2、我在Quartus 14.1 环境下生成了socfpga_cyclone5.dts, 替换了dts文件夹里原有的文件后,在生成Zimage的过程中报错,好像是dts文件有问题,后来在linux下用Sopc2dts生成的dts文件就能编译通过。
请问 能否介绍一下如何生成和使用和Quartus工程一致的dtb文件呢?
作者: chunlei9924    时间: 2015-6-16 22:42
学习了,很好的帖子
作者: 的神等等    时间: 2016-7-18 15:22
sh200436 发表于 2015-6-11 13:57
您好版主,我买了一块DE1-SOC的板子,正在学习中,有这么几个疑问:
1、  make ARCH=arm zImage LOADADDR=0 ...

请问我之前编译过程中会报错,在core里面,说是缺少链接文件,请问您有遇到吗?
作者: BOB_Sun    时间: 2016-7-21 16:07
的神等等 发表于 2016-7-18 15:22
请问我之前编译过程中会报错,在core里面,说是缺少链接文件,请问您有遇到吗? ...

建议具体描述你的操作 以及遇到的问题,以便帮你分析。
作者: 的神等等    时间: 2016-7-21 17:34
BOB_Sun 发表于 2016-7-21 16:07
建议具体描述你的操作 以及遇到的问题,以便帮你分析。

我就是按照上面的步骤来的,但是在make ARCH=arm zImage LOADADDR=0x8000这一步的时候,在编译过程中出现了utils.c链接找不到的问题。
作者: matthew_wang    时间: 2016-7-22 09:28
的神等等 发表于 2016-7-21 17:34
我就是按照上面的步骤来的,但是在make ARCH=arm zImage LOADADDR=0x8000这一步的时候,在编译过程中出现 ...

具体问题需要把错误提示找出来才能解决,你说的utils.c 也可能是系统问题。也有可能你的内核文件丢失,重新下载看看
作者: 的神等等    时间: 2016-7-22 09:51
matthew_wang 发表于 2016-7-22 09:28
具体问题需要把错误提示找出来才能解决,你说的utils.c 也可能是系统问题。也有可能你的内核文件丢失,重 ...

确实是那个内核丢掉了那个文件,我重新找了一个文件添加进去就ok了,不过重新配置之后的zImage也是不能用,不知你是否解决了你之前遇到的问题。
作者: 的神等等    时间: 2016-7-22 09:51
matthew_wang 发表于 2016-7-22 09:28
具体问题需要把错误提示找出来才能解决,你说的utils.c 也可能是系统问题。也有可能你的内核文件丢失,重 ...

确实是那个内核丢掉了那个文件,我重新找了一个文件添加进去就ok了,不过重新配置之后的zImage也是不能用,不知你是否解决了你之前遇到的问题。
作者: BOB_Sun    时间: 2016-7-22 14:44
的神等等 发表于 2016-7-22 09:51
确实是那个内核丢掉了那个文件,我重新找了一个文件添加进去就ok了,不过重新配置之后的zImage也是不能用 ...

您好!

不能用是个什么现象?
作者: 的神等等    时间: 2016-7-22 15:26
BOB_Sun 发表于 2016-7-22 14:44
您好!

不能用是个什么现象?

就是读取完文件之后在start kernel的时候就死掉了。如图。

QQ截图20160722152355.png (26.77 KB, 下载次数: 1162)

QQ截图20160722152355.png

作者: BOB_Sun    时间: 2016-7-25 09:14
的神等等 发表于 2016-7-22 15:26
就是读取完文件之后在start kernel的时候就死掉了。如图。

请问您用的QuartusII版本是多少?
作者: 的神等等    时间: 2016-7-25 09:53
BOB_Sun 发表于 2016-7-25 09:14
请问您用的QuartusII版本是多少?

13.1的版本
作者: 的神等等    时间: 2016-7-25 18:57
BOB_Sun 发表于 2016-7-22 14:44
您好!

不能用是个什么现象?

您好,我现在生成的zImage可以使用了,但是在使用的过程中发现了原本官方提供的FB系统可以用VGA显示控制台,内核编译之后发现不能显示了。硬件的话也没有改变,请问这是什么原因呢?
作者: BOB_Sun    时间: 2016-7-26 09:20
的神等等 发表于 2016-7-25 18:57
您好,我现在生成的zImage可以使用了,但是在使用的过程中发现了原本官方提供的FB系统可以用VGA显示控制 ...

您好!

您需要获取带frambuffer 的内核:
https://github.com/altcrauer/linux/tree/arrow_vga_313
作者: 的神等等    时间: 2016-7-26 16:19
BOB_Sun 发表于 2016-7-26 09:20
您好!

您需要获取带frambuffer 的内核:

已经可以了,多谢指导
作者: zjc5477    时间: 2017-7-7 09:59
BOB_Sun 发表于 2016-7-26 09:20
您好!

您需要获取带frambuffer 的内核:

请问你是怎么解决的zImage不能用的问题来?我和你遇到一样的问题了。可以说一下嘛?谢谢了
作者: zjc5477    时间: 2017-7-7 10:00
的神等等 发表于 2016-7-26 16:19
已经可以了,多谢指导

请问你是怎么解决的zImage不能用的问题来?我和你遇到一样的问题了。可以说一下嘛?谢谢了
作者: BOB_Sun    时间: 2017-7-7 16:16
zjc5477 发表于 2017-7-7 09:59
请问你是怎么解决的zImage不能用的问题来?我和你遇到一样的问题了。可以说一下嘛?谢谢了 ...

您好!

请问您用的是哪款开发板呢?

您用的是哪个Quartus 版本呢?

您遇到的“zImage不能用的问题”具体是什么问题呢?是自己生成的zimage吗,是在哪个步骤中遇到问题呢?

请您尽可能详细的描述一下您的问题,便于我们帮您分析。

谢谢!
作者: zjc5477    时间: 2017-7-7 17:12
BOB_Sun 发表于 2017-7-7 16:16
您好!

请问您用的是哪款开发板呢?

DE1,13.1Quartus
用的内核版本是3.12,github上下载的,按着你这编译然后内核到了starting  kernel那儿就卡住了。。系统起不来,不知道是什么问题。
作者: zjc5477    时间: 2017-7-7 17:19
BOB_Sun 发表于 2017-7-7 16:16
您好!

请问您用的是哪款开发板呢?

后来用了3.16版本的内核,系统可以启动,但是网络不通。。不知道什么问题,文件系统用的yocto编译出来的最小系统,然后加了自己的改动!
作者: BOB_Sun    时间: 2017-7-11 10:32
zjc5477 发表于 2017-7-7 17:19
后来用了3.16版本的内核,系统可以启动,但是网络不通。。不知道什么问题,文件系统用的yocto编译出来的 ...

您好!

网络不通,有可能是您在编译内核的时候没有添加altera 的TSE IP 核驱动,也有可能是您网络没有配置好。

请您先检查一下。

谢谢!
作者: zjc5477    时间: 2017-7-11 10:39
BOB_Sun 发表于 2017-7-11 10:32
您好!

网络不通,有可能是您在编译内核的时候没有添加altera 的TSE IP 核驱动,也有可能是您网络没有配 ...

您好,现在解决了。设备树的编译方法有问题。以前是用ghrd工程里的方法,现在用的是内核源码的方法编译,感觉内核编译的话设备树源码和内核源码能够有效地匹配,用这种方法编译设备树比较好

作者: zjc5477    时间: 2017-7-11 10:43
BOB_Sun 发表于 2017-7-11 10:32
您好!

网络不通,有可能是您在编译内核的时候没有添加altera 的TSE IP 核驱动,也有可能是您网络没有配 ...

您好,想再请教一下,如何直接root自动登录,然后自动执行用户的应用程序,不用输入字符??
作者: BOB_Sun    时间: 2017-7-12 10:30
zjc5477 发表于 2017-7-11 10:43
您好,想再请教一下,如何直接root自动登录,然后自动执行用户的应用程序,不用输入字符?? ...

您好!

如果要实现自启动,可以尝试修改vi /etc/inittab 文件,添加命令。

谢谢!
作者: douser2676    时间: 2018-4-14 23:30
楼主我想问下为什么你的其他帖子和主题我都看不到啊?是我的刚注册的原因还是你做了设置?
不好意思,这个网站我刚注册的,所以问了这么low的问题
作者: douser2676    时间: 2018-4-17 23:29
l楼主,你其他资料的链接能分享出来给我们学习学习吗?
作者: jcwangzi    时间: 2020-2-1 21:08
学习了,很好的帖子




欢迎光临 MyFPGA Forum (http://www.myfpga.org/discuz/) Powered by Discuz! X3