imx6ul 平台(5)–软件开发(3)—软件编译(UBOOT/KERNEL/ROOTFS)

(技术交流QQ群:744140106)                            (博客:https://blog.csdn.net/weixin_43854435)

                                             

                          imx6ul 平台(5)–软件开发(3)—软件编译(UBOOT/KERNEL/ROOTFS)

                                                                                           匠心源工作室

                                                                                         技术交流群(744140106

                                                                         博客地址(https://blog.csdn.net/weixin_43854435

                                                                                          二〇二一年1

文章描述

  • 为什么linux平台相关软件开发都是移植添加、删除、修改完善三个部分不从0开始不能一版通杀所有平台li>
  • UBOOT的编译步骤;
  • KERNEL的编译步骤;
  • ROOTFS的编译步骤

为什么linux平台相关软件开发都是移植添加、删除、修改完善三个部分不从0开始不能一版通杀所有平台h1>

       开发人员会发现,对于任何linux系统平台,我们在开发的时候,都不是从0开始,即从一个什么没有到有的过程。我们购置任何一款主流的能跑linux系统的处理器时,都能在其官 上下载其UBOOT、KERNEL、ROOTFS三个方面的公版软件。我们开发时,就是基于此公版软件上做对应的添加、删除、修改。对于玩过软件的人,尤其是单片机的人可能就会问,咱们为啥要用别人的自己做要抄别人的未必写的如自己意p>

      为啥是为了避免二次重复开发。21世纪的我们,很不喜欢归纳,不喜欢玩自己的标准和规范。如同和面,从小到大,自己的母亲总是凭着感觉发面团做包子,但每次蒸出来的包子有时候软乎,有时候硬邦邦。从没有考虑过在自己成功的时候,记录下当时水和面比例,混合的方式,各个阶段的温度,当时的酵母数量和成份以及时间等,所以每次做包子总会思考和自己父亲探讨是否水放多了,还是发过了。同样硬件设计各个功能在早期时,都是凭着硬件工程师自己拼凑成自己想要的功能,造成了一个硬件工程师在大学毕业时候,绘制一个按键电路,10年后还是重新设计,但还是有时候会出现差错。这是设计者不善于总结,没有将成功的可控的电路采用模块的方式保管下来,做成属于自己的标准,后续在设计此部分电路,直接拿过来使用。从而不需要思考太多,直接使用。

     实际在生活中,最直观避免二次开发就是各种规范。最通俗的就是机械中的螺母,将各种要用到的螺母按照一种规范分成标准的几种通用常规尺寸螺母,这样不需要在设计机械时候,专门做特殊的螺母,可以在市面上或者自己开过的模具中选用。

     而linux平台开发也是如此。对于一个处理器平台,按照功能性而言,支持的功能总是可控制的功能。芯片厂商将这些功能归纳,规范形成一个个标准的接口,并在芯片自身的地址总线上,按照类别,分配给各个接口连续的地址,约定了其范围。这样带来的好处是,对于芯片公司,在设计后续扩展时,总会在对应地址范围内扩展对应功能,如 络地址,如RAM,前面已经分配过的端口地址,保留;对于硬件开发人员,由于芯片自身是按照对应的标准,或者自己公司的标准,那么硬件工程师曾今开发过的外围芯片部分完全可以不需要重新开发,只是考虑外围芯片和当前芯片的布线方式,其他完全可以挪用;对于软件开发人员,由于芯片各个功能端口是标准的,如果这些各个端口对应的软件已经开发完毕,软件工程师只是决定用哪一个其中间部分实现过程是不需要考虑的。

    以上种种描述了为什么半导体厂商帮助我们做了对应的硬件和软件公版设计。但为什么我们不能直接使用,还要自己修改了情况下,应用工程师只需要更改此芯片和其他芯片的链接设计。但有时候,有些半导体厂商不负责任,给出的公版电路或软件设计并不是那么全面,这就需要用户自行好好根据其datasheet、以及自己需求,来修改对应软硬件公版设计了。

   所以我们开发imx6ul时,所以在官 上下载对应的共模软件。

    UBOOT的编译步骤

       在这里,我们默认您已经下载了我们提供的UBOOT软件。

  •  解压Uboot源码到对应的目录中如:

  • 声明交叉编译器为当前SHELL的环境变量

       在这里,假设交叉编译器已经安装,如果未安装,可在其他文档中查看如何下载和安装。

  • 进入到UBOOT源码目录编译

      在这里假设uboot的源码已经根据当前的电路需求,完成了对应的移植和裁剪。

   

     编译内核

    

在这里,我们默认您已经下载了我们提供的内核软件。

  •  解压内核源码到对应的目录中如:

  • 声明交叉编译器为当前SHELL的环境变量

       在这里,假设交叉编译器已经安装,如果未安装,可在其他文档中查看如何下载和安装。编译完成后,会在主目录下生成一个u-boot.imx文件。

  • 进入到内核源码目录编译

      在这里假设内核的源码已经根据当前的电路需求,完成了对应的移植和裁剪。

   编译完成后,会在arch/arm/boot/目录下生成一个zImage的问题,在arm/boot/dts/生成一个imx6ul-14×14-evk-gpmi-weim.dtb的设备树。这里我们将它们重命名为zImage-mfg和imx6ul-14×14-evk-mfg.dtb。

 

     编译文件系统

 在这里,我们默认您已经下载了我们提供的buildroot软件。这里并没有采用官方提供的ROOTFS,这是由于当前官方提供的文件系统太大。

  •  解压buildroot源码到对应的目录中如:

  • 配置

       这一步是在定制buildroot,需要注意的是我们只用它来构建文件系统,所以我们要将Linux Kernel和Bootloaderst都配置成[ ],同时还应将交叉编译器指定成这里的gcc-linaro-7.3.1-2018.05-x86_64_arm-linux-gnueabihf,其它配置可以参考:https://blog.csdn.net/wangwenxue1989/article/details/90085798。后期,我们也可能会去补充一些命令或者库的移植方法,敬请期待。    

  • 进入到文件系统源码目录编译

     通过下面指令。最终生成的文件系统就是:buildroot-2019.02/output/images/rootfs.tar,我们将它压缩成rootfs.tar.bz2

 

总结:

      这样linux平台的Uboot,kernel,文件系统的可烧录文件就编成了。

 

 

 

 

 

 

 

 

 

 

 

 

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月6日
下一篇 2021年1月6日

相关推荐