嵌入式linux内核启动流程 – haodro.com

您所在的位置:网站首页 arm内核芯片访问外设基本方法 嵌入式linux内核启动流程 – haodro.com

嵌入式linux内核启动流程 – haodro.com

2023-04-21 00:33| 来源: 网络整理| 查看: 265

嵌入式linux中应用程序怎么启动另一个应用程序

开机后自动运行用户的应用程序或启动系统服务的命令保存在开发板根文件系统的/usr/etc/rc.local文件中。有的开发板开机后自动运行图形界面程序,需要按住ctrl+c让开发板进入到linux的SHELL提示符界面。其实可通过注释掉rc.local文件中调用图形界面的命令,增加运行用户应用程序的命令,达到开机自动运行用户应用程序的目的。下面以我做的实验为例,描述具体的实现步骤。该方法源于网络,我加以验证,稍做修改,此文相当于转载。1.进入pc机的Linux操作系统,在/nfs/usr/下通过mkdirlz命令新建一个名为lz的文件夹,进入lz文件夹,通过mkdirhello新建一个hello文件夹用来存放我们将要编写的hello.c文件和编译生成的可执行文件。2.在/nfs/usr/lz/hello下通过vihello.c命令新建hello.c文件,如下测试程序:#includeintmain(){printf(“Hello,testarm-linux!\n“);return0;}完成后通过:wq保存后退出。3.主机通过如下命令交叉编译环境编译hello.c:#arm-linux-gcc–ohellohello.c4.通过ls命令可以看到在/nfs/usr/lz/hello/下已经生成了hello可执行文件,我们可以在开发板上通过./hello来测试自己编写的hello.c执行情况5.修改rc.local文件,在文件的最后通过‘#’释掉启动图形界面的指令,增加执行用户应用程序hello的指令,具体实现如下:#exportPATH=$QPEDIR/bin:$PATH#qtopia#/usr/qtopia/bin/qtopia/usr/lz/hello/./hello注:前三行是注释掉启动图形界面,最后一行是添加的执行用户的hello测试程序。6.重启开发板,通过vivi参数配置让开发板通过nfs挂载主机上的文件系统,这时我们就可以通过超级终端看到开发板已经运行了我们编写的hello程序。

作为一个新人,怎样学习嵌入式Linux

你装一个linux系统。当然虚拟机就行。先学习标准C、然后学习linux的Unix C当然这种C很相似。就是函数不太一样。思想都是一样的。上面两个网上都有教学视频。把网上的教学视频看完就差不多了。当然教程中要求练习的地方必须要动手做。只想大体思路是绝对不行的,这样学到的东西很不扎实。这两个学习差不过了。就可以买一块开发板玩了。如果你趋向于裸跑的程序,可以买一个arm7、arm9的板子,当然可以用cortex-m系列的也就是stm32系列的单片机开发板。裸跑和单片机没什么区别了。就是arm的cpu比单片机寄存器复杂一些。这就看你阅读cpu芯片手册的能力了。当然这个平台上也能跑一些系统比如uCOS就是个很好的实时操作系统。如果你趋向于操作系统,你可以上cortex-a8 、a9系列的cpu了。这个需要学习的东西比较多。学习操作系统的启动代码必须要学。现在最流行的是u-boot。然后学习一下系统移植方面的东西:1、文件系统制作 。流行的软件是busybox2、系统裁剪。这个你买的开发板都会带平台代码。也可以在www.kernel.org上下载源码自己编译。这个时候你就可以用u-boot(类似我们常见的主板bios)启动你的系统。加载你自己编译好的linux内核。系统就启动起来了。最难学的是你要搞嵌入式系统的开发。基本要了解linux内核了。自己学的话需要在网上找一找相关教程看看。(这个我不知道有没有视频教程),没有的话要买一个《linux内核高级编程》学习。这本书太难啃了。要学习操作系统的嵌入式开发,还远不止我说的那些。还有库移植、makefile脚本也要学习。linux内核启动原理(启动过程加载那些文件、启动参数)。arm启动原理等等。你可以边工作边学习,从事嵌入式周边行业的(嵌入式应用方面)所以可以学一学嵌入式的图形开发工具:QT,这个很有意思。然后慢慢的想嵌入式方向发展。这是一个漫长的过程。如果想速成也可以报班学习。另外就是Unix c部分的网络编程很重要这个地方要学好。学好了也可以从事linux的网络协议栈相关工作。

求嵌入式linux开发详细流程(步骤)

1.首先,建立交叉编译环境:交叉编译是指:在PC机上编译,在目标板上执行,我PC是linux+ arm-elf-gcc编译器.扳子是ARM3000.板子上的系统是uclinux,这时一个剪裁的很小的实时嵌入式linux操作系统.推荐使用这个.2.然后就是你写程序喽,不过注意可能有些库函数不能用,因为哪个编译器稍微受限一点,不是所由的c库函数都支持,不过一般开发的都有.3.连起你的主机和开发板,这个你会不?要连两个:串口(用来控制板子)和以太口(用来下载程序),我们板子上这些外设都有,你要使没有可以用其他的口代替传程序,但串口可是该有的阿!4.在你主机上编译程序生成目标代码,建议用makefile文件来组织你的联编关系.5.把生成代码下载到目标板执行调试.我是用的主机的NFS(网落文件)服务,下载到目标板的.6.注:目标板是怎么控制的呢?是用串口控制的,可用minicom,设置好你要控制的串口,也应该是你连板子的那个.在命令行里敲上minicom,即进入minicom截面,开启你的板子,应该就是板子uclinux系统解压安装的画面了.然后用ifconfig eth0…..配置ip,这个ip就是你板子的ip了,注意与主机一个网段.然后mount -t nfs 主机ip:/uclinux /板子上的一个目录,就把主机的 uclinux目录放到板子上了(这么说其实不合理,应该叫挂载). 然后找到你刚才一经编译好的哪个目标代码执行即可.因不了解你的具体环境和配置,暂说这些,有问题可再联系:)

请教linux启动过程中dtb的作用

  dtb文件作用的描述是,使用dtb可以减少linux内核版本的数量。同一份linux 内核代码可以在多个板卡上运行,每个板卡可以使用自己的dtb文件。  1,在linux内核启动过程中会解析dtb文件,根据dtb文件中设备列表进行加注各个外设的驱动模块。  2,PC机在启动时会自动扫描外设,而在嵌入式中,linux内核启动过程中只是解析dtb文件,从而加载对应的模块。  3,编译linux内核时必须选择某外设模块,并且dtb中包括该外设的信息。在linux内核启动过程中才能自动加载该模块。  要使用dtb,需要uboot启动内核时,在bootm命令中指定dtb的位置,格式为:  bootm uImage_addr ramdisk_addr dtb_addr  如果没有ramdisk,就需要写成bootm uImage_addr – dtb_addr,用“-”表示没有ramdisk

嵌入式linux的bootloader的启动流程是怎样的

嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。

当系统首次引导时,或系统被重置时,处理器会执行一个位于Flash/ROM中的已知位置处的代码,Bootloader就是这第一段代码。它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统作为根文件系统(Root Filesystem),然后加载必要的内核模块,启动应用程序。这就是嵌入式Linux系统启动过程 Linux 引导的整个过程。

Bootloader 的启动方式:

网络启动方式。这种方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。

硬盘启动方式传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。

Flash启动方式。大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区。

谁能给我说一下嵌入式Linux的开发流程包括哪些步骤请详细介绍,谢谢了

嵌入式Linux开发流程在一个嵌入式系统中使用Linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都要经过如下的过程:1.建立开发环境操作系统一般使用RedHat-Linux,版本从7到9都可以,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(例如arm-Linux-gcc、arm-μclibc-gcc),或者安装产品厂家提供的交叉编译器。2.配置开发主机配置MINICOM,一般的参数为波特率为115 200bps,数据位为8位,停止位为1,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样的。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络,主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。3.建立引导装载程序BOOTLOADER从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。有些芯片没有内置引导装载程序,例如三星的ARM7、ARM9系列芯片,这样就需要编写开发板上Flash的烧写程序,网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是系统正常运行的第一步。如果购买了厂家的仿真器当然比较容易烧写Flash,这对于需要迅速开发自己产品的人来说可以极大地提高开发速度,但是其中的核心技术是无法了解的。4.下载别人已经移植好的Linux操作系统如μCLinux、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过的,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,对于μCLinux这样的系统则需编译进内核进行调试。5.建立根文件系统从www.busybox.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件。6.建立应用程序的Flash磁盘分区一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性Flash(NOR型)512KB~32MB,有的系统使用非线性Flash(NAND型)8~512MB,有的两个同时使用,需要根据应用规划Flash的分区方案。7.开发应用程序应用程序可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μCOS-II的方式。8.烧写内核、根文件系统、应用程序9.发布产品

嵌入式Linux开发,如何让程序开机启动

如ZLG的EasyArm-280A学习班的Linux系统中/etc/rc.d/init.d/start_userapp文件是开机自动启动的脚本文件,需要开机自动执行的命令或者应用程序,都可以在这里添加。但你要注意,如果程序是阻塞程序要开机自启动,一定要在命令后加上&以示后台执行。否则很可能会始终占用串口终端,造成其他程序无法运行。

嵌入式Linux系统的如何进行初始化

LINUX系统的初始化可以分为两部分:内核部分和init程序部分。内核主要完成系统的硬件检测和初始化,init程序则主要完成系统的各项配置。主要流程是:CPU自身初始化–》加载BIOS–》BIOS加载内核引导程序(也就是ubuntu我们常说的GRUB)–》内核引导程序加载内核映像(这里的内核代码是压缩过的)–》内核映像获得CPU控制权并开始工作–》内核映像自己解压缩,开始运行init/main.c中的start_kernel()函数,这时候内核就启动了,系统初始化,系统的父进程init进程执行起来了,这时候整个系统初始化完毕,接下来只是调用一些UI界面的进程执行。这是我的一点浅陋简介,希望对你有所帮助,谢谢!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3