嵌入式linux系统的开发-release版的编译与编程除了控制硬件资源外,还提供系统调用接口供应用程序使用。但说到Linux,其实有两种意思:Linux内核(Kernel)和Linux发行版(distribution):Linux内核由LinusTorvalds于1991年开发,一直负责版本维护;内核和工具与可执行软件集成在一起,形成一个更完整的操作系统。目前Linux发行版有大大小小400多个,用于不同的场合,如Redhat、Mandriva、Fedora、SuSe、Debian、Ubuntu等,不同的Linux发行版包含的周边软件不同,镜像分布的大小是不同的。它们也各不相同,以适应不同的用户群体和功能定位。Linux应用于嵌入式设备,嵌入式linux是根据嵌入式产品的特殊应用需求而形成的,如openwrt。本文主要介绍linux发行版lede(LinuxEmbeddedDevelopmentEnvironment)在嵌入式设备上的应用方法。注:lede是openwrt开发者的一个分支,经过不和,决定重新合并。源码交叉编译1、LEDE17.01.4源码下载地址:https://github.com/lede-proje...2、交叉编译环境为Ubuntu16.04LTS32位,需要的依赖库用于安装和编译安装。Linux发行版通过源列表维护自己的软件仓库。sudogedit/etc/apt/sources.list命令可以查看源列表。源列表中记录了一些URL信息,每个URL指向源服务器上的软件。sudoapt-getupdate命令访问源列表中的每个URL,读取软件列表,并将其保存在本地计算机上。我们在新立得包管理器中看到的软件列表是通过update命令更新的。更新完成后,使用sudoapt-getupgrade命令将本地安装的软件与下载的软件列表中对应的软件进行对比。如果发现安装的软件版本过低,会提示更新软件。$sudoapt-getupdate$sudoapt-getinstallgitg++makelibncurses5-devsubversionlibssl-devgawklibxml-parser-perlunzipwgetpythonxz-utilsvimopenjdk-7-jdk注意:apt-getupdate命令可能会出现如下Error错误信息E:ProblemexecutingscriptsAPT::Update::Post-Invoke-Success'if/usr/bin/test-w/var/cache/app-info-a-e/usr/bin/appstreamcli;然后appstreamcli刷新>/dev/null;fi'E:Sub-processreturnedanerrorcode解决方法sudopkill-KILLappstreamcliwget-P/tmphttps://launchpad.net/ubuntu/+archive/primary/+files/appstream_0.9.4-1ubuntu1_amd64(i386).debhttps//launchpad.net/ubuntu/+archive/primary/+files/libappstream3_0.9.4-1ubuntu1_amd64(i386).debsudodpkg-i/tmp/appstream_0.9.4-1ubuntu1_amd64(i386)。deb/tmp/libappstream3_0.9.4-1ubuntu1_amd64(i386).deb.1注意:apt-getinstall命令可能会出现如下错误错误信息:Thepackageopenjdk-7-jdkhasnoinstallablecandidate解决方法:手动添加仓库sudoadd-apt-repositoryppa:openjdk-r/ppasudoapt-getupdatesudoapt-getinstallopenjdk-7-jdk3,feeds是lede/openwrt环境依赖的软件包,比如packages,luci,routing等feeds.conf.default文件包含feeds包下载源信息,更新安装feeds包后,可以在makemenuconfig中配置相关包。$./scripts/feedsupdate-a$./scripts/feedsinstall-a注意:./scripts/feedsupdate-a命令的执行信息如下:Updatingfeed'packages'from'https://github.com/widora/packages.git;widora_dlna_patches'...已经是最新的。创建索引文件'./feeds/packages.index'正在从'https://github.com/widora/更新提要'luci'luci.git;master'...已经是最新的.Createindexfile'./feeds/luci.index'.........注:./scripts/feeds的执行信息install命令如下:安装来自feedpackages的所有包。正在安装来自feedluci的所有包。正在安装来自feedrouting的所有包。正在安装来自feedtelephony的所有包。正在安装来自feedmanagement的所有包。4.在lede配置界面选择CPU型号(联发科MT7628)、文件系统(squashFS)、网络功能、脚本Language等,配置完成后保存退出。将配置信息与makefile关联起来,编译加入相应功能的软件包。$使menuconfig4.编译lede源文件。编译过程中需要连接外网下载软件包。也可以下载软件包,存放在dl路径下,减少编译时间。makeV=s查看详细的编译日志。编译后在bin/ramips目录下生成固件lede-ramips-mt7628-wrtnode2p-squashfs-sysupgrade.bin$make-j4$makeV=s5,路径为/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等文件。查看编译信息可知wrtnode2p-kernel.bin和root.squashfs合并为lede-ramips-mt7628-wrtnode2p-squashfs-sysupgrade.bin固件编程由于uboot支持TFTP协议,所以在Ubuntu上可以安装TFTP服务器,启动uboot时,选择TFTP协议,在串口调试终端Kernel和文件系统上烧录。1.安装TFTP服务器sudoapt-getinstalltftp-hpatftpd-hpa2。修改tftpd-hpa配置文件,TFTP_DIRECTORY为固件存放路径sudogedit/etc/default/tftpd-hpaTFTP_USERNAME="tftp"TFTP_DIRECTORY="/home/yuanxiao/ftp123"TFTP_ADDRESS="[::]:69"TFTP_OPTIONS="-l-c-s"3.创建tftp目录,将编译好的bin文件存放在该路径下mkdir/home/yuanxiao/ftp123chmod777/home/yuanxiao/ftp1234,启动tftp服务器$sudoservicetftpd-hparestart5,安装串口超级终端minicom并调试串口交互$sudoapt-getinstallminicom6,这里使用USB转串口设备,通过命令查看设备文件为ttyUSB07,在终端输入“minicom-s”即可设置minicom,配置完成后执行命令“minicom”,进入串口超级终端界面8、uboot启动后,选择操作2“LoadsystemcodethenwritetoFlashviaTFTP”,设置设备IP地址,服务器IP地址和固件名称配置完成后,进行烧录。编程完成后,进入内核启动阶段。小结对于嵌入式linux系统的开发,交叉编译和固件下载是第一步,当内核加载完成后,会逐渐Levelrun/sbin/init,/etc/rc.d/rc.sysinit,/etc/rc.d/rc.local等程序和脚本文件完成相应的初始化工作和服务启动,当执行/bin/login程序后进入登录状态,表示linux系统启动,然后进入linux系统发展阶段。
