资讯专栏INFORMATION COLUMN

嵌入式linux系统的开发——发行版的编译和烧写

Tonny / 464人阅读

摘要:编译后在目录生成固件在路径下包含了等文件,通过查看编译信息可知,最终是通过命令和命令等将和合并成固件烧写由于支持协议,可在上安装服务器,当启动后在串口调试终端上选择以协议方式烧写内核和文件系统。

前言

Linux是一套免费使用和自由传播的操作系统,作为一套操作系统,Linux由内核和系统调用接口组成,除了有效地控制硬件资源外,同时提供系统调用接口给应用程序使用。但说到Linux其实有Linux内核(Kernel)和Linux发行版(distribution)两层含义:Linux内核是由Linus Torvalds在1991年主持开发,并至今一直负责版本维护;Linux发行版是指软件厂商将Linux内核及工具与可运行的软件集成,形成更完整的操作系统。目前大大小小应用于不同场合的Linux发行版已经超过400余种,如Redhat、Mandriva、Fedora、SuSe、Debian、Ubuntu等,不同Linux发行版包含的外围软件并不一样,发行版的镜像大小差别也不相同,以适用于不同的用户群体和功能定位。

Linux为应用于嵌入式设备上,按嵌入式产品的特殊应用要求进行高度裁剪形成了嵌入式linux,如openwrt等,本文主要介绍将linux发行版lede(Linux Embedded Development Environment)应用在嵌入式设备上的方法。

注:lede是在openwrt 的开发者之间出现分歧后的一个分支,目前已经决定重新合并。
源码交叉编译

1、LEDE 17.01.4源码下载地址:https://github.com/lede-proje...

2、交叉编译环境为Ubuntu 16.04 LTS 32 位,安装编译所需依赖库。linux发行版是通过源列表来维护自己的软件仓库,sudo gedit /etc/apt/sources.list命令可查看源列表。源列表中记录一些网址信息,每一条网址指向源服务器上的软件。sudo apt-get update命令访问源列表里的每个网址,并读取软件列表,将其保存在本地电脑上。我们在新立得软件包管理器里看到的软件列表,都是通过update命令更新的。update后使用sudo apt-get upgrade命令把本地已安装的软件,与下载的软件列表中对应软件进行对比,如果发现已安装的软件版本太低,则提示更新软件。

$ sudo apt-get update 

$ sudo apt-get install git g++ make libncurses5-dev subversion libssl-dev gawk libxml-parser-perl unzip wget python xz-utils vim openjdk-7-jdk

注:apt-get update命令可能出现如下错误

错误信息

E: Problem executing scripts APT::Update::Post-Invoke-Success "if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi"
E: Sub-process returned an error code

解决方法

sudo pkill -KILL appstreamcli
wget -P /tmp https://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64(i386).deb https://launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64(i386).deb
sudo dpkg -i /tmp/appstream_0.9.4-1ubuntu1_amd64(i386).deb /tmp/libappstream3_0.9.4-1ubuntu1_amd64(i386).deb.1

注:apt-get install命令可能出现如下错误

错误信息:软件包openjdk-7-jdk 没有可安装候选

解决方法:手动添加仓库

sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jdk

3、feeds是lede/openwrt环境所依赖的软件包,如packages、luci、routing等。feeds.conf.default文件包含feeds包下载源信息,更新并安装feeds包后可在make menuconfig中进行相关软件包配置。

$ ./scripts/feeds update -a 
$ ./scripts/feeds install -a

注:./scripts/feeds update -a命令执行信息如下

Updating feed "packages" from "https://github.com/widora/packages.git;widora_dlna_patches" ...
Already up-to-date.
Create index file "./feeds/packages.index" 
Updating feed "luci" from "https://github.com/widora/luci.git;master" ...
Already up-to-date.
Create index file "./feeds/luci.index" 
.......

注:./scripts/feeds install命令执行信息如下

Installing all packages from feed packages.
Installing all packages from feed luci.
Installing all packages from feed routing.
Installing all packages from feed telephony.
Installing all packages from feed management.

4、lede配置界面中选择CPU型号(联发科MT7628)、文件系统(squashFS)、网络功能、脚本语言等,配置完成后保存退出,配置信息会与makefile文件建立关联将对应功能的软件包加入编译。

$ make menuconfig

4、 编译lede源文件,在编译的过程中要连外网用于下载软件包,也可先下载软件包存放至dl路径下减少编译时间。make V=s查看详细编译log。编译后在bin/ramips目录生成固件lede-ramips-mt7628-wrtnode2p-squashfs-sysupgrade.bin

$ make -j4
$ make V=s

5、在路径/media/yuanxiao/322857BE28578031/linux_comp/source-17.01.4/build_dir/target-mipsel_24kc_musl-1.1.16/linux-ramips_mt7628下包含了wrtnode2p-kernel.bin、 root.squashfs等文件,通过查看编译信息可知,最终是通过dd命令和cp命令等将wrtnode2p-kernel.bin和 root.squashfs合并成lede-ramips-mt7628-wrtnode2p-squashfs-sysupgrade.bin

固件烧写

由于uboot支持TFTP协议,可在Ubuntu 上安装 TFTP服务器,当uboot启动后在串口调试终端上选择以TFTP协议方式烧写内核和文件系统。

1、安装TFTP服务器

sudo apt-get install tftp-hpa tftpd-hpa

2、修改tftpd-hpa配置文件,TFTP_DIRECTORY为固件存放路径

sudo gedit /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/home/yuanxiao/ftp123" 
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS="-l -c -s"

3、创建tftp目录,将编译后bin文件存放在该路径下

mkdir /home/yuanxiao/ftp123
chmod 777 /home/yuanxiao/ftp123

4、启动tftp服务器

$sudo service tftpd-hpa restart

5、安装串口超级终端minicom与调试串口交互

$sudo apt-get install minicom

6、此处使用USB转串口设备,通过命令查看设备文件为ttyUSB0

7、在终端输入“minicom -s”对minicom设置,配置完成后执行命令”minicom”即进入串口超级终端界面

8、uboot启动后选择2号操作“Load system code then write to Flash via TFTP”,对设备IP地址、服务器IP地址、固件名称配置完成后进行烧写,烧写完成后进入内核启动阶段


总结

对于嵌入式linux系统的开发,交叉编译和固件下载是第一步工作,而当内核加载完成后,会逐级运行/sbin/init、/etc/rc.d/rc.sysinit、/etc/rc.d/rc.local等各种程序和脚本文件来完成相应的初始化工作和服务的启动,当执行/bin/login程序进入登录状态后意味着linux系统启动完成,接下来进入到linux系统开发阶段。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/10677.html

相关文章

  • 入式linux系统开发——基于JFSS2文件系统分区及镜像制作

    摘要:系统分区文件为实现更加灵活的硬件支持和配置,对设备的硬件信息进行描述,涉及到系统类型系统分区网口寄存器声明等。 前言 对于嵌入式Linux系统来说,绝大多数硬件设备采用Flash作为存储介质,LEDE/OPENWRT发行版会使用squash文件系统和jffs2文件系统相结合的方式作为整个系统的文件系统,其中squash文件系统是一种压缩只读文件系统,而jffs2文件系统支持可读可写操作...

    hlcc 评论0 收藏0
  • Linux——Linux驱动之设备树编译环境搭建实践总结(设备树、uboot、内核编译及镜像烧写

    摘要:系列专栏博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来开发实战开发实战嵌入式通用开发实战嵌入式通用开发实战 【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《

    韩冰 评论0 收藏0
  • Linux学习

    摘要:学习树莓派的的初识学习树莓派的的初识初识初识学习书籍正点原子嵌入式驱动开发指南章节第三十章学习内容书中介绍的获取可以有三个途径第一个是的官方代码。网上的烧写树莓派教程很多,但是为了学习我选择了官方的代码。Linux学习 - 树莓派4b的U-Boot的初识初识U-Boot学习书籍:《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.5.1》章节:第三十章学习内容:书中介绍uboot的获...

    不知名网友 评论0 收藏0
  • MySQL™ 参考手册(在Linux上安装MySQL)

    在Linux上安装MySQL Linux支持许多不同的安装MySQL的解决方案,建议使用Oracle提供的发行版中之一,其中有几种安装方法可供使用: 类型 安装方法 Apt 启用MySQL Apt存储库 Yum 启用MySQL Yum存储库 Zypper 启用MySQL SLES存储库 RPM 下载特定包 DEB 下载特定包 Generic 下载通用包 ...

    whinc 评论0 收藏0
  • 3类6种,主流容器操作系统全比较

    摘要:单从容器部署的角度出发,这类操作系统可以满足需求不过如果企业存在资源受限的非容器应用程序例如物联网的应用程序,这些应用程序也应该作为整个应用程序环境的一部分被考虑进来。 5月8日 晚20:30,Kubernetes Master Class在线培训第五期《Kubernetes中的日志、监控与告警》即将开播,点击链接:http://live.vhall.com/317569561 即可免...

    luzhuqun 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<