搭建FPGA SOC系统(5)编译Linux内核

学习主要参考https://rocketboards.org/foswiki/Documentation/EmbeddedLinuxBeginnerSGuide

1.获取Linux内核

输入以下指令,从GitHub上克隆altera发行的Linux内核

git clone https://github.com/altera-opensource/linux-socfpga.git

进入内核目录,输入以下指令可查看内核发布的各个版本。

cd linux-socfpga
git tag -l rel*

输入以下指令,拷贝一个最新发布的版本出来进行使用。

git checkout rel_socfpga-5.9_21.03.02_pr

2.配置内核

输入以下指令,设置默认配置。这将创造一个”.config”文件,其设置与默认配置文件中的设置相同。

make ARCH=arm socfpga_defconfig

输入以下指令,安装配置内核的GUI依赖库。

sudo apt-get install libncurses5-dev

打开内核配置工具

make ARCH=arm menuconfig

之后会打开类似下图的内核配置界面。

8-kernel1.png

  1. 进入General setup,取消选中Automatically append version information to the version string选项,这将防止内核向内核添加额外的“版本”信息。

每当我们试图动态加载一个驱动程序(也称为内核模块,在后面的章节中会讨论)时,内核会检查这个驱动程序是否是用与自己相同版本的源代码构建的。如果不是,它将拒绝加载该驱动程序。对于开发来说,禁用这些选项很有用,这样可以更容易地测试不同版本的驱动程序。然而,在生产系统中,建议启用这个选项,并且只使用用正确版本的内核编译的驱动程序。

8-kernel2.png

  1. 按两次退出键返回主菜单。请注意“nable loadable module support””是被选中的。这意味着我们将能够在内核启动后动态加载驱动程序。这在开发我们的自定义驱动程序时会很有用(这样,我们就不必每次想测试驱动程序时都重新编译)。
  2. “Enable block layer”也被启用。这允许我们在系统中使用“块设备”(硬盘、固态硬盘、SD卡、USB闪存驱动器和许多其他存储设备)。如果我们不小心禁用了这个,内核将无法从我们的SD卡中读取数据。(顺便说一下,闪存设备在技术上不同于块设备,但许多闪存设备(如SD卡和闪存驱动器)上都有一个模拟块设备的微控制器)。
  3. 进入“Enable block layer”菜单选项,启用“Support for large (2TB+) block devices and files”选项。虽然在您的文件系统上实际上有2TB+文件的可能性很小,但是如果您查看这个选项的帮助(按“?”)您会注意到,如果您使用的是EXT4文件系统(我们就是这样),就需要启用这个选项。如果您忘记启用这个选项,内核会以只读模式挂载您的文件系统,并打印出一条有用的消息,提醒您如果想要完全的读/写支持,请返回并启用这个选项。

8-kernel3.png

  1. 在“System Type”菜单下,向下滚动,直到看到“Altera SOCFPGA family”选项。这是为了让内核知道soc它将继续运行。

8-kernel4.png

  1. 在“Kernel Features”下,应该启用“Symmetric Multi-Processing”选项。这告诉内核使用两个以上的ARM Cortex-A9内核SOC;“Memory split”和“High Memory Support”选项分别用于确定有多少地址空间专用于内核,以及有多少物理内存可以从系统内部访问。这些是一些复杂的主题,如果你打算使用1gb或更多的内存,我建议通读一下Linux每周新闻文章让您对虚拟内存在Linux中是如何工作的有一个基本的了解。

  2. 在“Device Drivers”标题下,浏览并查看哪些驱动将被编译到内核中。需要注意几个选项(因为我们使用的是AlteraSOC是从Linux配置FPGA并与之交互所必需的。该菜单中还启用了MMC/SD/SDIO卡支持。如果没有这个功能,Linux将无法访问SD卡。

  3. 按两次退出键返回主菜单。在“File systems”下,确保至少启用了“The Extended 4 (ext4) filesystem”选项。考虑到我们使用这个文件系统作为我们的根文件系统,如果没有这个驱动程序的支持,内核将无法挂载根文件系统。

  4. 在“Miscellaneous filesystems”下,注意“Jounalling Flash File System v2”选项是如何启用的。这是在闪存设备(如QSPI或NAND闪存)上使用的一个非常流行的文件系统。如果您想要将Linux放在一个闪存设备上(不仅仅是一个块设备),那么确保启用这个选项(假设您想要使用这个文件系统)。

  5. 回到主菜单,然后进入“Kernel Hacking→Compile-time checks and compiler options”。应该启用“Compile the kernel with debug info”选项。这将把调试符号编译到内核中,使得分析崩溃转储和使用内核调试工具成为可能。这也会使内核变得更大,应该在生产系统中禁用。其他调试选项在“Kernel Hacking”菜单中启用,可能会被禁用以减小内核大小。

记得浏览其余的内核选项,并试图弄清楚它们是做什么的。内置的帮助系统非常有用(只要按“?”当悬停在一个选项上时)以及谷歌。

当你看完可用的选项后,点击右箭头键选择窗口底部的“save”选项,然后按回车键。当要求输入文件名时,保留默认值(.config)并按回车键。再次按enter,然后退出配置工具。

3.编译内核

在编译之前,需要确保交叉编译器的环境变量配置正确。路径根据实际进行修改。

export CROSS_COMPILE=/home/dyq/gcc-linaro-arm-linux-gnueabihf-4.9-2014.09_linux/bin/arm-linux-gnueabihf-

执行编译,生成压缩后的Linux映像zImage

make ARCH=arm LOCALVERSION= zImage

这会花费20分钟左右的时间。内核完成编译后,生成的镜像文件将位于“arch/arm/boot”中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值