ARM64-Linux:内核裁剪过程(全志H616平台)

之前已经成功在orangepi zero2开发板上将底层的开机启动过程处理完毕了,接下来就需要让它做一点符合它四核cortex-A53身份的事情了:运行操作系统.  首先从Linux内核官网中获取主线内核,  将源码压缩包下载下来后在Ubuntu下解压缩, 然后打开源码目录, 先使用默认配置:

linux> make ARCH=arm64 CROSS_COMPILE=(your crosscompiler) defconfig

ARM64架构下的源码目录和ARM架构下的源码目录有很大不同,在ARM目录下各个半导体厂商都会编写自己芯片的默认配置文件保存在arch/arm/configs目录下面,但是在ARM64架构下只有一个默认配置文件,因为ARM64是较新的架构,所以这种目录安排也体现了这几年Linux内核的发展风格逐渐趋于简约.  defconfig将必要的模块编译进入到内核中,其他不必须的模块编译成模块. 这样直接使用默认配置编译而成的内核镜像大小为40Mb左右。由于默认配置中编译了大量冗余部分,故我们要根据自己的需求进行裁剪。 

在生成默认配置文件后,我们采用图形窗口的形式进行裁剪:

linux> make ARCH=arm64 CROSS_COMPILE=(Your cross_compile) menuconfig

 然后我们就进入了大家熟悉的图形配置窗口:

 这个窗口的第二行,从名字可以看出这里面的配置是和各个平台相关的,我们选中进入:

配置完成的内容
配置完成后的样子


H616是全志(Allwinner)生产的,所以我们取消掉其他半导体公司的选项,至于这些配置的具体内容我们可以到arch/arm64/Kconfig.platform中查看:H616相关的配置选项如下:

 前三项配置选项从名字便可大概知道作用,后三项分别是时钟相关配置,中断控制器相关配置,不可屏蔽中断的配置,c代码位于drivers/irqchip目录中。另外[ ]ARMv8 software model (Versatile Express)这个选项也可选上,从Kconfig文件来看这个选项主要是针对电源管理PM和GPIO进行了配置,因为H616是Cortex-A53核心的,所以这个选项勾选上。

之后我们进入到Device Drivers中进行配置,首先GNSS选项是针对卫星导航系统的,从电路图上得知我们的开发板没有导航模块,故取消选择:

然后Soundwire support是音频总线协议,我的后续开发暂时用不到,取消选择: 

然后进入 Multimedia support目录,再进入media device types目录,

如图,取消掉开发板不存在的外设。

然后进入Digital TV options,取消所有选择: 

 退出Multimedia support目录后,进入Graphics support目录:

 这个界面的默认配置会选择上海思麒麟系列SOC平台和一众其他平台的芯片,我们要取消选择,另外通过查阅全志H616的芯片手册(第294页)可以得知:

手册294页GPU架构内容

 H616采用的是ARM mali-G31核的GPU。ETNAVIV选项是针对使用Vivante的IP核的芯片,所以这个选项要取消选择,另外取消上方英伟达的驱动,然后选择将Panfrost编译为模块:

到目前为止已经完成了内核的配置,保存,退出。

编译内核。 

linux>  make ARCH=arm64 CROSS_COMPILE=(...) 

执行内核的编译和链接过程,并且在arch/arm64/boot目录下生成Image文件这个文件就是内核的二进制镜像文件.  内核的make过程将各个.o和.a文件链接后产生的文件是vmLinux,这个文件因为是链接后的第一产物所以还保留这ELF格式的各种段,  和在上篇的u-boot源码编译链接后在源码根目录下产生的名为u-boot的文件一样都是ELF格式.  但是因为无论是u-boot还是Linux内核都是直面底层硬件的软件程序, 而ELF格式的可执行文件需要在操作系统提供的虚拟化环境下才能被解释和运行,故make过程最后还需将vmLinux的代码段(.text)段单独抽离出来生成Image, 在编译ARM时生成的zImage又是Image经过gzip压缩后的结果.  启动zImage需要uboot的bootz的支持.  将这个Image拷贝到上篇制作的SD卡中的fat32文件系统中, 再将/arch/arm64/boot/dts/allwiner/中的zero2文件拷贝到那里.  

    启动orangepi zero2开发板, 在boot界面用setenv命令更改bootcmd:

u-boot>  setenv bootcmd 'fatload mmc 0:1 0x40200000 Image;fatload mmc 0:1 0x4fa00000 sun50i-h616-orangepi-zero2.dtb;booti 0x40200000 - 0x4fa00000'

然后再更改bootargs.(为之后引导内核挂载根文件系统做准备)

u-boot>  setenv bootargs 'console=ttyS0,115200 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw'

u-boot>  saveenv

这里的bootargs变量最终会传递给内核start_kernel函数调用的setup_command_linene)函数, root变量表明根文件系统的位置是mmc0的第二分区.  

用boot命令启动内核,  这种情况下内核提示kernel panic说未找到根文件系统,  那么接着就需要制作根文件系统了.

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
当出现"make: arm-linux-gnueabihf-ld: Command not found"的错误提示时,这表示系统无法找到arm-linux-gnueabihf-ld这个命令。这通常是由于缺少必要的编译工具链或者相关的库文件导致的。解决这个问题的方法有以下几种: 1. 确保安装了正确的编译工具链:arm-linux-gnueabihf-ld是GNU链接器的一部分,用于链接目标文件生成可执行文件。请确认已经正确安装了与arm-linux-gnueabihf-gcc相匹配的工具链,包括GNU链接器。 2. 检查系统的PATH环境变量:请确保arm-linux-gnueabihf-ld所在的目录已经添加到系统的PATH环境变量中。可以通过在Terminal中运行`echo $PATH`命令来查看当前的PATH设置,并确认是否包含了arm-linux-gnueabihf-ld所在的目录。 3. 检查编译工具链的安装位置:如果arm-linux-gnueabihf-ld确实存在于系统中,但仍然无法找到,可能是因为它被安装在了非标准的位置。可以尝试使用完整路径来运行该命令,例如`/path/to/arm-linux-gnueabihf-ld`,其中"/path/to"是arm-linux-gnueabihf-ld命令所在的实际路径。 4. 确保相关的库文件已安装:arm-linux-gnueabihf-ld可能依赖于某些库文件,如果缺少这些库文件,也会导致无法找到该命令。可以通过查看编译工具链的文档或官方网站,找到arm-linux-gnueabihf-ld所依赖的库文件,并确保这些库文件已正确安装在系统中。 总结:当出现"make: arm-linux-gnueabihf-ld: Command not found"的错误提示时,需要检查是否正确安装了arm-linux-gnueabihf-ld所在的编译工具链,并确保相关的库文件已正确安装。另外,还需要确认系统的PATH环境变量是否包含arm-linux-gnueabihf-ld所在的目录。如果问题仍然存在,可以尝试使用完整路径来运行该命令。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [sudo: arm-linux-gnueabihf-gcc: command not found解决方法](https://blog.csdn.net/weixin_47715886/article/details/108963986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [make: arm-linux-gnueabihf-gcc: Command not found](https://blog.csdn.net/HGGshiwo/article/details/120479087)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值