文章目录

  • 1.linux开发初了解
    • 1.1 嵌入式Linux开发的基本概念
      • 1.1.1关于Git的背景介绍
      • 1.1.2关于repo的背景介绍
      • 1.1 3 一些关于此背景知识的介绍
      • 1.1.4关于Linux内核的背景介绍
      • 1.1.5关于Bootloader的背景介绍
    • 1.2 日常工作中开发流程是怎样?
    • 1.3 常用的软件

1.linux开发初了解

1.1 嵌入式Linux开发的基本概念

嵌入式Linux系统,就相当于一套完整的PC软件系统。
嵌入式Linux开发有哪些内容?

Windows里含有: 简单地说,嵌入式LINUX系统里含有


① 电脑一开机,那些界面是谁显示的?
是BIOS,它做什么?一些自检,然后从硬盘上读入windows,并启动它。
类似的,这个BIOS对应于嵌入式Linux里的bootloader。
Bootloader的作用就是去Flash、SD卡等设备上读入Linux内核,并启动它。
② Windows系统必需的软件,比如IE、文件浏览器等保存在哪里?
在C盘上,里面有各种系统软件。
对应的,系统运行必需的文件在Linux下我们称之为根文件系统。
③ windows能识别出C盘、D盘,那么肯定有读写硬盘的能力。
这个能力我们称之为驱动程序。当然不仅仅是操作硬盘,还有网卡、USB等等其他硬件。
嵌入式Linux能从Flash上读出并执行应用程序,肯定也得有Flash的驱动程序啊,当然也不仅仅是Flash。
④ Windows启动之后,我们就是聊QQ、玩游戏了,这些就是APP,它们存在磁盘上

同样的,嵌入式Linux系统中我们也有各种APP,它们位于根文件系统上。


① bootloader:用于启动Linux内核
② Linux内核(含有驱动程序):提供进程管理、文件管理、硬件驱动等
③ 根文件系统:系统运行必需的文件、程序
④ APP:保存于根文件系统上

1.1.1关于Git的背景介绍

什么是Git?


Git由Linus Torvalds在2005年创建,用于Linux内核的开发,其他内核开发人员也为它的初始开发做出了贡献。Git是一个免费和开源的 分布式版本控制系统,旨在快速高效地处理从小型到大型项目的所有内容。Git 和其它版本控制系统(包括 Subversion 和近似工具)的主要差别在于 Git 对待数据的方法。 从概念上来说,其它大部分系统以文件变更列表的方式存储信息,这类系统(CVS、Subversion、Perforce、Bazaar 等等) 将它们存储的信息看作是一组基本文件和每个文件随时间逐步累积的差异 (它们通常称作 基于差异(delta-based) 的版本控制)。
参考引用: 请点击

我们为什么要用Git来管理源码?


Git的开发流程和代码管理方式适用于国内外各大中小企业,Git也适用于个人发布自己程序源码以及博客网站,同时在文件代码管理上可以很方便的获取同步最新,多人协作开发,以及查看历史提交,集成编译等。

1.1.2关于repo的背景介绍

什么是repo?


repo是Git之上构建的工具。Repo帮助管理许多Git存储库,将其上载到修订控制系统,并自动执行部分开发工作流程。Repo并不是要取代Git,而只是为了使其更易于使用Git。repo命令是可执行的Python脚本,您可以将其放置在路径中的任何位置。

1.1 3 一些关于此背景知识的介绍

制作根文件系统有归多种方法:
① 使用Busybox手工制作
Busybox本身包含了很了Linux命令,但是要编译其他程序的话需要手工下载、编译,如果它需要某些依赖库,你还需要手工下载、编译这些依赖库。
如果想做一个极简的文件系统,可以使用Busybox手工制作。
② 使用Buildroot自动制作
它是一个自动化程序很高的系统,可以在里面配置、编译内核,配置编译u-boot、配置编译根文件系统。在编译某些APP时,它会自动去下载源码、下载它的依赖库,自动编译这些程序。
Buildroot的语法跟一般的Makefile语法类似,很容易掌握。
③ 使用Yocto
NXP、ST等公司的官方开发包是使用Yocto,但是Yocto语法复杂,并且Yocto动辄10GB,下载安装都很困难,普通笔记本编译可能需要2-3天甚至更久,非常不适合初学者(我们不推荐使用yocto构建文件系统)。

基于上述特点,我们选择Buildroot。
Buildroot是一组Makefile和补丁,可简化并自动化地为嵌入式系统构建完整的、可启动的Linux环境(包括bootloader、Linux内核、包含各种APP的文件系统)。Buildroot运行于Linux平台,可以使用交叉编译工具为多个目标板构建嵌入式Linux平台。Buildroot可以自动构建所需的交叉编译工具链,创建根文件系统,编译Linux内核映像,并生成引导加载程序用于目标嵌入式系统,或者它可以执行这些步骤的任何独立组合。例如,可以单独使用已安装的交叉编译工具链,而Buildroot仅创建根文件系统。
参考网址
Buildroot用户手册 请点击
Buildroot源码下载位置 请点击
目录结构的位置以及作用请参考网址请点击
学习更多关于buildroot知识请参考 请点击
百问网提供的Buildroot现支持如下包:

busybox  taglib  libopenh264 qt5_gl_available
skeleton_init_systemd   tremor  libopusenc  qt5_jscore_available
alsa_utils  libarchive  libtheora   qt5
bluez_alsa  zlib    libvpx  qt5_version_latest
faad2   libzlib libyuv  qt5base
ffmpeg  has_zlib    live555 qt5base_network
flac    libassuan   mediastreamer   qt5base_concurrent
fluidsynth  libgcrypt   x264    qt5base_sql
gstreamer1  libgpg_error    x264_cli    qt5base_sqlite_none
jack2   Libgpgme    libcurl qt5base_test
lame    Libksba libnice qt5base_xml
mjpegtools  Openssl libnl   qt5base_gui
musepack    libopenssl  libpcap qt5base_widgets
pulseaudio  sqlite  libshout    qt5base_opengl
twolame libconfig   libsoup qt5base_opengl_es2
wavpack libconfuse  libsrtp qt5base_opengl_lib
bzip2   libfuse libtirpc    qt5base_linuxfb
lz4 liblockfile neon    qt5base_eglfs
xz  bayer2rgb_neon  ortp    qt5base_default_qpa=""
gdb bullet  rtmpdump    qt5base_printsupport
gdb_server  cairo   bctoolbox   qt5base_fontconfig
gdb_debugger    cairo_pdf   elfutils    qt5base_harfbuzz
gdb_tui cairo_png   glibmm  qt5base_gif
spidev_test cairo_svg   libb64  qt5base_jpeg
strace  fontconfg   libbsd  qt5base_png
libtool freetype    libcap  qt5base_dbus
cifs_utils  gdk_pixbuf  libcroco    qt5base_icu
dosfstools  giflib  libevdev    qt5base_openssl
e2fsprogs   harfbuzz    libffi  qt5base_tslib
mmc_utils   jasper  libglib2    qt5canvas3d
nfs_utils   jpeg    libical qt5charts
glmark2_flavor_any  kmsxx   libnpth qt5connectivity
libva_utils libdrm  libsigc qt5declarative
fb_test_app libmediaart liburcu qt5declarative_quick
fbdump  libpng  llvm    qt5enginio
fbset   libraw  mpdecimal   qt5graphicaleffectslibrsvg  protobuf    qt5imageformats
psplash libsvg  tzdata  qt5location
xkeyboard_config    libsvg_cairo    icu qt5multimedia
dbus    libva   libfribidi  qt5quickcontrols
evtest  opencv3 ncurses qt5quickcontrols2has_libegl pcre    qt5script
gptfdisk    has_libgles pcre2   qt5scxml
i2c_tools   openjpeg    popt    qt5sensors
iostat  pango   readline    qt5serialbus
linux_serial_test   pipewire    slang   qt5serialport
memtool pixman  bluez_tools qt5svg
parted  tiff    bluez5_utils    qt5virtualkeyboard
spi_tools   wayland bmon    qt5webchannel
sysstat webp    iperf3  qt5websockets
uboot_tools dtc iproute2    qt5xmlpatterns
has_udev    libaio  iw  attr
usbmount    libgudev    lrzsz   keyutils
usbutils    libinput    mii_diag    kmod
luajit  libpciaccess    mjpg_streamer   kmod_tools
python3 libusb  mosquitto   start_stop_daemon
alsa_lib    libxkbcommon    net_tools   swupdate
fdk_aac mtdev   openobex    systemd
libcodec2   tslib   openssh util_linux
libcuefile  expat   pppd    myir_hmi_gui
libreplaygain   json_glib   rpcbind rs485read
libsamplerate   jsoncpp tcpdump
libsndfile  libxml2 wget
libvorbis   bitstream   wireless_tools
mp4v2   libass  opkg
opus    libcamera   bash
portaudio   libmms  gnupg2
sbc libmpeg2    gnupg2_gpgv
speex   libogg  lockfile_progs  

我们都做了哪些改进?


我们基于buildroot官方 2020.02长期支持版本进行适配imx6ull开发板,在此基础上针对ST yocto发行系统做了大量的裁剪,在保证最小系统的基础上增加对qt5.12 库的支持,同时也支持opencv3编程 mqtt库 swupdate ota升级等等比较常用的应用,我们也会提供如何在buildroot新增自己的软件包教程,同时源码保存在gitee上,链接地址为 请点击 大家可以在上面提交issue 或者pull request。

什么是init系统服务?


init(为英语:initialization的简写)是 Unix 和 类Unix 系统中用来产生其它所有进程的程序。它以守护进程的方式存在,其进程号为1。Linux系统在引导时加载Linux内核后,便由Linux内核加载init程序,由init程序完成余下的引导过程,比如加载运行级别,加载服务,引导Shell/图形化界面等等。

什么是systemv守护进程?


System V(缩写为SysV)在大多数Linux发行版中使用最广泛,在systemv中,有一个第一个程序在内核加载后运行。该程序称为init。Init做一些事情,其中之一就是加载一系列脚本来启动各种系统服务,例如网络,ssh守护程序等。
System V中的运行级别描述了某些状态。例如:
运行级别0:暂停
运行级别1:单用户模式
运行级别6:重新启动
systemv的问题在于它需要仔细调整。假设您有一个要在启动时运行的网络文件系统(NFS)客户端。在网络正常工作之前运行NFS没有任何意义。因此,您必须确保它等待启动,直到网络已经正常工作为止。Systemv init这样做的方法是为服务启动设置严格的顺序。每个服务都分配有一个优先级编号,init会按优先级顺序启动服务。如果需要确保网络连接后启动服务,则必须手动为服务分配更高的优先级。这必须由某人(通常是软件包维护者)针对计算机上运行的每项服务来完成。

所有System V初始化脚本都存储在/etc/rc.d/init.d/或/etc/init.d目录中。这些脚本用于控制系统的启动和关闭。通常,您会在这个目录找到启动ssh服务器或网络的脚本,使用/etc/init.d/S50sshd start 开启某个服务或者使用/etc/init.d/S50sshd stop关闭某个服务。

什么是systemd守护进程?


systemd这一名字源于Unix中的一个惯例:在Unix中常以“d”作为系统守护进程(英语:daemon,亦称后台进程)的后缀标识。除此以外,systemd亦是借代英文术语D体系,而这一术语即是用于描述一个人具有快速地适应环境并解决困难的能力。
systemd是Linux电脑操作系统之下的一套中央化系统及设置管理程序(init),包括有守护进程、程序库以及应用软件,由Lennart Poettering带头开发。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低Shell的系统开销的效果,最终代替现在常用的System V与BSD风格init程序。目前绝大多数的Linux发行版都已采用systemd代替原来的System V。

将service(服务)、target(运行模式,类似于运行级别)、mount、timer、snapshot、path、socket、swap等称为Unit。比如,一个auditd服务(就是auditd.service)就是一个Unit,一个multi-user.target运行模式也是一个Unit,其中不同的服务通过 systemctl 来进行统一管理,例如重启一个sshd服务,需要执行 systemctl restart sshd 命令,同样的如果添加一个启动程序需要自己定义一个 service服务才可以。

你可以用我们提供的buildroot做些什么?


快速实现自己的想法,增加自己的应用,学习了解busybox以及各种包是如何编译生成,用于调试内核或者应用程序等等。

深入了解学习更多关于buildroot知识请参考 请点击

buildroot下进入menuconfig包选择配置配置界面

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make menuconfig

buildroot下单独编译内核

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make  linux-rebuild

buildroot下进入内核make menuconfig配置选项界面

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make linux-menuconfig

buildroot下单独编译u-boot

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make uboot-rebuild

buildroot下单独编译某个软件包

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make <pkg>-rebuild

buildroot下进入busybox配置界面

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make busybox-menuconfig

buildroot下生成系统sdk,最后生成的目录在output/images/目录下

book@100ask:~/100ask_stm32mp157_pro-sdk/Buildroot_2020.02.x$ make sdk

深入了解学习更多关于buildroot知识请参考 请点击

1.1.4关于Linux内核的背景介绍

Linux内核(英语:Linux kernel)是一种开源的类Unix操作系统宏内核。整个Linux操作系统家族基于该内核部署在传统计算机平台(如个人计算机和服务器,以Linux发行版的形式)和各种嵌入式平台,如路由器、无线接入点、专用小交换机、机顶盒、FTA接收器、智能电视、数字视频录像机、网络附加存储(NAS)等。工作于平板电脑、智能手机及智能手表的Android操作系统,它的底层操作系统也是Linux。尽管在桌面计算机的占用率较低,但基于Linux的操作系统统治了几乎从移动设备到主机的其他全部领域。实际Linux的发行版Ubuntu,其易用性也逐渐接近Windows。
Linux kernel官网:请点击
linux Kernel维基百科:请点击
在线阅读linux kernel源码:请点击
Git仓库地址: 请点击
更多关于Linux内核资料请参考页面:请点击
NXP官方kernel源码Git仓库地址: 请点击

上述Git仓库是专为100ask_imx6ull系列开发板制定的Linux内核,它有如下特性:

最后重启开发板reboot,它就使用新的zImage、dtb、模块了。

1.1.5关于Bootloader的背景介绍

Bootloader是在操作系统运行之前运行的一段代码,用于引导操作系统。通常每个操作系统都有一组专属的引导加载程序。引导加载程序通常可以通过多种方式引导操作系统内核,还有各种命令用于调试或修改内核运行环境。
U-Boot是一个开源的主引导加载程序,用于引导设备的操作系统内核,并含有多种命令以便调试系统。它适用于多种计算机体系结构,包括68k,ARM,Blackfin,MicroBlaze,MIPS,Nios,SuperH,PPC,RISC-V和x86。
U-boot官网 请点击
源码下载页面 请点击
Git仓库地址 请点击
uboot更多使用讲解请参考页面 请点击
NXP官方uboot源码Git地址: 请点击
注意:我们使用的版本针对板子进行过修改,u-boot官网下载的源码不能直接使用。

1.2 日常工作中开发流程是怎样?

Bootloader、Linux内核、APP等等软件,需要在Ubuntu中编译;但是阅读、修改这些源码时,在Windows下会比较方便。
所以,我们需要在Windows、Ubuntu上都存有源码。
① 在Windows上阅读、研究、修改(使用Source insight会很方便),修改后上传到Ubuntu(使用Filezilla)
② 在Ubuntu上编译、制作(使用MobaXterm远程登录Ubuntu会很方便)
③ 把制作好的可执行程序下载到开发板上运行、测试(使用MobaXterm连接开发板的串口)。
在整个开发过程中,我们会用到Windows、Ubuntu、开发板,如下图所示:

这里只是列出要做的事情,后面会一一讲到。

  1. 安装VMware、下载Ubuntu映象
  2. 安装Windows上各个APP
    这些APP有:SouceInsight、FileZilla、MobaXterm、Notepad++
  3. 下载源码和工具链
    工具链:必须下载或上传到Ubuntu,并设置好PATH环境变量。(简单地说,工具链就是编译器)
    源码:u-boot、Linux内核,学习到时再下载也行,Windows和Ubuntu各存一份。
    注意:根文件系统是使用buildroot制作的,它无需放在Windows上。
  4. 连接开发板
    ① 连接电源线到开发板,
    ② 开发板的串口线,接到Windows电脑;并用MobaXterm连接串口。
    ③ 开发板的网线,接到路由器或交换机,网络的设置请参考以下文档(可先不做):
  5. 烧写系统
    如果开发板系统崩溃,或是新到手的板子上没有系统,请根据后面的开发板使用手册手册来烧写系统。

1.3 常用的软件

有如下软件:
软件名 说明
vmware 虚拟机软件,安装时需要用到管理员权限,详细的安装过程见后文
Source insight 阅读、编写源码的工 具,即装即用;推荐初学者使用
Visual Studio Code 阅读、编写源码的工具,需要进行很多配置;不推荐初学者使用
MobaXterm 串口工具、远程登录工具
Filezilla 文件传输工具,在Windows和Ubuntu之间传输文件
Notepad++ 文本编辑工具,比记事本好用

注意:Visual Studio Code的配置比较麻烦,建议初学者使用Source insight来阅读、编写源码。

嵌入式linux/鸿蒙开发板(IMX6ULL)开发(一) 嵌入式Linux开发基本概念以及开发流程介绍相关推荐

  1. 嵌入式linux/鸿蒙开发板(IMX6ULL)开发(十四)文字显示

    文章目录 一.文字显示 1.1 字符的编码方式 1.1.1 编码和字体 a. ASCII b. ANSI c. UNICODE 1.1.2 UNICODE编码实现 1.2 ASCII字符点阵显示 1. ...

  2. 学完stm32开发板下一步如何选嵌入式ARM开发板

    如何选择ARM开发板 市场上开发板玲琅满目,我们怎么来选择ARM开发板呢?除了要求ARM开发板资料齐全以外,技术是不是主流.能否结合当前嵌入式产品的应用开发需要,也是很关键的,因为IT技术发展很快,不 ...

  3. 中国嵌入式高端ARM开发板的江湖故事——详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局

    // Topic:中国嵌入式高端ARM开发板的江湖故事--详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局 //作者:gooogleman //版权:gooogleman  邮箱 ...

  4. 中国嵌入式高端ARM开发板的江湖故事 详细分析国内各家ARM11 S3C6410 开发板的选型以及竞争格局

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! // T ...

  5. android开发板那种好,学嵌入式用哪个开发板好?嵌入式开发板推荐

    学习嵌入式,必不可少的工具就是一块开发板.对新手而言,学嵌入式用哪个开发板好,下面为大家推荐一款比较好的嵌入式开发板. 嵌入式开发板要推荐的是:fs4412开发板,是当前前沿的ARM Cortex-A ...

  6. 基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘

    基于迅为2K1000开发板龙芯处理器安装 Linux系统到固态硬盘 硬件:迅为2K1000开发板 固态硬盘 LS2K1000 龙芯处理器支持 SATA 接口,所以在迅为开发板的底板板载了一个 M2 接 ...

  7. Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核

    Mastering Embedded Linux Programming 学习 (三)在百问网157开发板上,编译构建linux内核 一.下载内核源码 wget http://ftp.sjtu.edu ...

  8. 烧写linux系统到开发板中,Mini2440烧写Linux系统

    按照国嵌课程在Linux系统下使用dnw软件烧写系统失败,开机白屏. 烧写步骤: 1.保持S2开关拨至nor flash开关处,连接串口线打开串口工具以便观察运行情况,打开电源开关. 2.使用jlin ...

  9. micropython开发板有什么用_MicroPython入门:能跑MicroPython开发板大盘点!

    相信对于很多刚刚接触MicroPython的DIY创客来说,首先是被一些大神的作品吸引,然后有冲动自己动手,却发现入门很难,特别是面对各式各样的开发板不知如何选择.目前市面上关于MicroPython ...

最新文章

  1. Udacity机器人软件工程师课程笔记(十五)-运动学-正向运动学和反向运动学(其二)-DH参数等
  2. Android onclicklistener中使用外部类变量时为什么需要final修饰【转】
  3. 如何安装Oracle客户端(Oracle Instant Client)
  4. 最课程阶段大作业05:污水处理系统以及百度地图
  5. c语言ffffff错误,C语言打印16进制出现0xffffff现象的问题剖析!
  6. 简要叙述计算机软件系统的组成,【计组第一章+答案】概论
  7. 2.4亿!知乎到底牛X在哪里!
  8. 系列文章--WF学习资料汇总
  9. angular : direative :comunication 指令之间的通讯
  10. 关于 idea 快捷键 alt + f7 无法使用的一些尝试
  11. linux 流式传输,Steam家用流式传输设置教程 Steam家用流式传输怎么用
  12. Linux4.13显卡切换,LINUX下手动切换双显卡或禁用其中一块显卡的解决办法
  13. 如何使用CentOS linux来搭建u-email邮件服务器(AIIP全国技能大赛企业联合教程)
  14. [译]How browsers work
  15. U大师U盘启动盘克隆制作工具
  16. OneDrive教育版注册和登录
  17. 如何转换图片格式为jpg?教你两种转换方法
  18. excel 查找/替换 回车键
  19. Plus and Multiply
  20. python中设置超时跳过,超时退出

热门文章

  1. 解决表格刷新时抖动闪烁问题
  2. 路由器刷机解决学校无线上网问题(小米4A千兆版)
  3. arcgis api 4.11之距离和面积测量实现
  4. MySQL 必知必会系列(五)
  5. 双系统window更新后,开机引导错误,grub rescue修复
  6. 实验一 验证删除快照时VMware会改变父快照或基础磁盘
  7. 【ubuntu】禁用IP和端口
  8. [Design]国粹京剧 脸谱表情 值得收藏
  9. 我的软考之路(四)——数据结构与算法(2)之树与二叉树
  10. 散射回波仿真Matlab,基于散射中心模型的ISAR回波仿真方法