zoukankan      html  css  js  c++  java
  • buildroot构建项目(一)---buildroot介绍【转】

    转自:https://www.cnblogs.com/kele-dad/p/8231434.html

    1.1 什么是buildroot

      Buildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样,通过buildroot配置,menuconfig修改,编译出一个完整的可以直接烧写到机器上运行的Linux系统软件(包含boot、kernel、rootfs以及rootfs中的各种库和应用程序)。

      下载:git clone git://git.buildroot.net/buildroot

      解压:tar -xzvf buildroot-2017.02.9.tar.gz

    1.2 buildroot 的目录结构

    • buildroot/package/:下面放着应用软件的配置文件,每个应用软件的配置文件有Config.in和soft_name.mk,其中soft_name.mk(这种其实就Makefile脚本的自动构建脚本)文件可以去下载应用软件的包。
    • buildroot/output/:是编译出来的输出文件夹,里面的build/目录存放着解压后的各种软件包编译完后的现场。
      • host:是由各类源码编译后在你主机上运行的工具(build for host)的安装目录,如arm-linux-gcc就是安装在这里.
        • 编译出来的主机工具在host/usr下
        • 根目录所需要的库及一些基本目录就在host/< tuple >/sysroot/或host/usr/< tuple >/sysroot/里 (< tuple >:arm-buildroot-linux-gnueabi),如果是外部toolchain,比如lirano的就在libc里,名字不一样而已  
      • build:所有源码包解压出来的文件存放地和编译的发生地
      • staging:软链接到host/< tuple >/sysroot/ 就是上面说到的文件系统需要的库等目录,方便查看
      • target: 目录是用来制作rootfs的,里面放着Linux系统基本的目录结构,以及各种编译好的应用库和bin可执行文件。不能用来nfs mount到开发板,因为buildroot不是root权权运行的,所以现dev/,etc/等一些文件无法创建,所以目录还不完整,要用images/里的rootfs.tar解压出来的根文件目录才能mount.使用如下命令:sudo tar -C /destination/of/extraction -xf images/rootfs.tar
      • Images:目录下就是最终生成的可烧写到板子上的各种image。
    • buildroot/dl:存放下载的源码包及应用软件的压缩包
    • buildroot/fs:放各种文件系统的源代码
    • buildroot/fs/skeleton:放生成文件系统镜像的地方,及板子里面的系统
    • buildroot/linux: 存放着Linux kernel的自动构建脚本。
    • buildroot/configs:放置开发板的一些配置参数
    • buildroot/dl:目录存放从官网上下载的开源软件包,第一次下载后,下次就不会再去从官网下载了,而是从dl/目录下拿开源包,以节约时间。本身下载通常都是很慢的,你可以手动找到相关包下载后放到这里就OK了,make时会自动检测这个目录.
    • buildroot/docs: 存放相关的参考文档。
    • buildroot/arch: 目录存放CPU架构相关的配置脚本,如arm/mips/x86 ,这些CPU相关的配置,在制作工具链,编译boot和内核时很关键。
    • buildroot/board:存放了一些默认开发板的配置补丁之类的
    • buildroot/boot:
    • buildroot/build:
    • buildroot/support:
    • buildroot/system:这里就是根目录的主要骨架了和相关的启动初始化配置,当制作根目录时就是将此处的文件cp到output里去.然后再安装toolchain的动态库和你勾选的package的可执行文件之类的.
    • buildroot/toolchain:

    1.3 buildroot 的工作原理

      Buildroot原则上是一个自动构建框架,虽然说u-boot、linux kernel这些经典的开源软件包的构建脚本,官方社区都在帮你实现了,但是有时候你还是需要加入你自己特有的app_pkg软件包,用以构建自己的应用。

      buildroot的编译流程是先从dl/xxx.tar下解压出源码到output/build/xxx,然后它利用本身的配置文件(如果有的话)覆盖output/build/xxx下的配置文件,在开始编译连接完成后安装到output/相应文件夹下.

      Buildroot提供了函数框架和变量命令框架,采用它的框架编写的app_pkg.mk这种Makefile格式的自动构建脚本,将被package/pkg-generic.mk 这个核心脚本展开填充到buildroot主目录下的Makefile中去。最后make all执行Buildroot主目录下的Makefile,生成你想要的image。

      package/pkg-generic.mk中通过调用同目录下的pkg-download.mk、pkg-utils.mk文件,已经帮你自动实现了下载、解压、依赖包下载编译等一系列机械化的流程。你只要需要按照格式写Makefile脚app_pkg.mk,填充下载地址,链接依赖库的名字等一些特有的构建细节即可。

      总而言之,Buildroot本身提供构建流程的框架,开发者按照格式写脚本,提供必要的构建细节,配置整个系统,最后自动构建出你的系统。

      

      buildroot/packages里面有丰富的应用软件的配置文件,可以通过make menuconfig,出现图形化界面进行选择丰富的开源软件包的编译和构建。

    1.4 构建JZ2440 开发环境

    1.4.1 查看一下当前的buildroot中支持的开发板

      执行命令: make list-defconfigs

      

      在 2017.02.9 版本中并没有三星的模块,这里我们只能自己慢慢的一步步构建了。

    1.4.2 构建开发板

      要构建自己的开发板,首先要创建一个基本的 buildroot配置作为开发板的基本编译系统。这里包括toolchain,kernel,bootloader,filesystem 和一个简单的 busy-box 用户空间。不要选择特别的配置,这个配置必须要足够小,并仅仅作为目标平台一个基本的 BusyBox 系统。

      执行 make menuconfig:

      

    • Target options:目标板的配置
      • Target Architecture:目标架构,这里选择 ARM(little endian),ARM小端模式
      • Target Binary Format:二进制格式,为 ELF
      • Target Architecture Variant:架构变体为 arm920t,内核类型
      • Target ABI:应用程序二进制接口,为EABI
      • Floating point strategy:浮点数的策略,选择为 Soft float
      • ARM instruction set:arm 汇编指令集,选择  ARM
    • Build options:主要是一些编译时用到的选项,比如dl的路径,下载代码包使用的路径,同时运行多个编译的上限,是否使能编译器缓冲区等等,这里按照默认就行了.
    • Toolchain:工具链选项
      • Toolchain type:Buildroot提供两种方式使用toolchain
        • external toolthain:非Buildroot提供的交叉编译器
        • Buildroot toolchain:Buildroot本身编译生成的Buildroot toolchain,直接选择此项
      • custom toolchain vendor name:填上S3C2440
      • C library:C库选择,选择 glibc
      • Kernel Headers:内核头文件,Linux 4.9.x kernel headers
      • glibc version:glibc版本选择,2.24
      • Binutils Version:binutils版本:2.27
      • Additional binutils options:附加的 binutils 选择,不填即可
      • GCC compiler Version:GCC版本选择,gcc 6.x
      • Additional gcc options:附件的GCC选项,不填写即可
      • Enable C++ support:使能C++支持,选上
      • Enable Fortran support:使能Fortran语言支持,不选
      • Enable compiler link-time-optimization support:是否支持LTO,不选,LTO是什么:http://blog.csdn.net/fickyou/article/details/52381776
      • Enable compiler OpenMP support:支持OpenMP?OpenMP用于共享内存并行系统的多处理器程序设计,OpenMP并不适合需要复杂的线程间同步和互斥的场合,OpenMp的另一个缺点是不能在非共享内存系统(如计算机集群)上使用。不选择
      • Enable graphite support :是否支持graphite。Graphite是应用WEB应用的一套开源的编程接口。不选择。具体看百度百科:https://baike.baidu.com/item/Graphite/9810474?fr=aladdin
      • Build cross gdb for the host:主机上运行gdb进行调试,不选
      • Copy gconv libraries:拷贝 gconv库,gconv库用于在不同字符集之间进行转换。默认不选即可
      • Enable MMU support:使能 MMU,S3C2440支持MMU,选上
      • Target Optimizations:不选
      • Target linker options:不选
      • Register toolchain within Eclipse Buildroot plug-in:eclipse插件支持,不选
    • System configuration:系统配置
      • Root FS skeleton:
      • System hostname:填写JZ2440 
      • System banner
      • Passwords encoding
      • Init system:系统初始化,选择 BusyBox
      • /dev management:设备文件管理,选择Dynamic using devtmpfs + mdev,即使用mdev动态加载设备节点的方式
      • Path to the permission tables:设备节点的配置表设置,一定要选择system/device_table_dev.txt,否则后面在dev目录下将不会生成各种设备节点。当然我们也可以手动的配置该文件,添加必要的节点或删除不需要的节点。
      • support extended attributes in device tables
      • Use symlinks to /usr for /bin, /sbin and /lib
      • Enable root login with password
      • Root password:进入linux控制台终端后的密码,为空则登录时不需要密码,默认登录用户名为root。为空。
      • /bin/sh (busybox' default shell)
      • Run a getty (login prompt) after boot:保持默认,默认为选中。
        • TTY port:配置为 ttySAC3
        • Baudrate :波特率,配置为 115200
        • TERM environment variable:默认即可
        • other options to pass to getty:默认即可
      • remount root filesystem read-write during boot
      • Network interface to configure through DHCP
      • Purge unwanted locales
      • Locales to keep
      • Generate locale data
      • Install timezone info
      • Path to the users tables
      • Root filesystem overlay directories:
      • Custom scripts to run before creating filesystem images
      • Custom scripts to run inside the fakeroot environment
      • Custom scripts to run after creating filesystem images
    • Kernel:内核配置
      • Kernel version:内核版本,选择用户自定义,Custom version
      • Kernel version:填上自己所需要的版本,4.14.12
      • Custom kernel patches:自定义的内核补丁,无
      • Kernel configuration:内核配置,选择 Using an in-tree defconfig file
      • Defconfig name:填写为 mini2440
      • Additional configuration fragment files:暂且不填写
      • Kernel binary format:内核二进制文件格式,zImage
      • Kernel compression format:内核压缩格式,选择gzip即可
      • Build a Device Tree Blob:设备树?暂且不填写
      • Install kernel image to /boot in target:暂且不填
      • Linux Kernel Extensions:内核扩展,默认不选择
      • Linux Kernel Tools:内核工具,默认不选择
    • Target packages
    • Filesystem images:文件系统选择,选择 yaffs2 root filesystem
    • Bootloaders:硬件启动程序,选择为 U-boot
      • Build system:u-boot系统选择为Kconfig
        • legacy:若是选择2015.04之前的u-boot 选择此项
        • Kconfig:2015.04之后的 u-boot 选择此项,勾选此项  
      • U-boot Version:U-boot版本,默认为 2017.01,选择为Custom version
      • U-Boot version:填写为2017.11
      • Custom U-boot patches:U-boot补丁,不添加
      • U-Boot configuration:U-boot配置,暂时还没有U-BOOT,所以选择为:Using an in-tree board defconfig file
      • Board defconfig:板子的配置,选择与架构一样的板子的默认文件,mini2440。后期再修改
      • U-boot needs dtc:是否需要设备树,默认,后期调试
      • U-boot needs OpenSSL:是否需要 OpenSSL,默认,后期调试修改
      • U-boot binary format:二进制文件,选择 .bin文件
      • produce a .ift signed image:默认
      • Install U-boot SPL binary image:默认
      • Environment image:默认
    • Host utilities
    • Legacy config options

      配置完成后,执行make命令。

      编译报错:

      

      这是因为 u-boot-2017.11中不再支持 mini2440的开发板了,找不到 mini2440_defconfig文件。

      u-boot-2017.11 解压到了 output/build 目录中。

      在目录中寻找 mini2440 开发板:find -name "*" | xargs grep -s mini2440

      

      可以看到 mini2440 在2014-01-13 被移除了。这样我们必须添加一块arm920t的开发板了。

      查找 S3C24X0:grep -irn --color "S3C24X0"

      

      S3C24X0的库函数还存在。这样得选择一块板子,重新搭建起 2440 开发板了。

      下一章继续。

  • 相关阅读:
    HDU 5583 Kingdom of Black and White 水题
    HDU 5578 Friendship of Frog 水题
    Codeforces Round #190 (Div. 2) E. Ciel the Commander 点分治
    hdu 5594 ZYB's Prime 最大流
    hdu 5593 ZYB's Tree 树形dp
    hdu 5592 ZYB's Game 树状数组
    hdu 5591 ZYB's Game 博弈论
    HDU 5590 ZYB's Biology 水题
    cdoj 1256 昊昊爱运动 预处理/前缀和
    cdoj 1255 斓少摘苹果 贪心
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/13513190.html
Copyright © 2011-2022 走看看