首页>>科技 >>内容

嵌入式linux工程师就业前景,超经典!工程师嵌入式Linux自学笔记及体会

发布时间:2023-11-08 19:02:09编辑:温柔的背包来源:

嵌入式linux工程师就业前景,超经典!工程师嵌入式Linux自学笔记及体会

很多朋友对嵌入式linux工程师就业前景,超经典!工程师嵌入式Linux自学笔记及体会不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

针对广大初学嵌入式系统的朋友,以下是我在接触嵌入式系统的过程中整理的一些资料,希望对大家有所帮助。典型的桌面Linux系统包括三个主要的软件层——Linux内核、C库和应用程序代码。

内核是唯一可以完全控制硬件的层,内核驱动代表了应用程序和硬件之间的对话。内核之上是C库,负责将POSIX API转换成内核可以识别的形式,然后调用内核将参数从应用传递给内核。应用程序依赖驱动程序内核来完成特定的任务。

设计嵌入式应用时,没有必要遵循这个层次。应用可以直接跨C库与内核对话,也可以将应用与内核绑定,甚至可以将应用写成内核的线程,在内核中运行。虽然这给移植带来了困难,但考虑到嵌入式系统的小尺寸要求,这是完全可行的。但是如果用三层软件结构的模型来学习嵌入式linux,会让我们的理解更清晰,更容易,更灵活。快速启动

构建嵌入式Linux应用最简单的方法就是从我们使用的桌面Linux开始,安装一个喜欢的版本,把我们的一个应用作为初始化的一部分,框架就完成了。

当然,嵌入式linux应用程序远比我们的桌面版本简单和具体。可能是足球彩票的终端,也可能是数字音频播放器。这些系统除了使用嵌入式CPU之外,只需要串口、网口等少量的输入输出接口就可以完成其特定的应用。

在软件上,可以按照三层的概念,由内核加载器、定制内核和为特定任务设计的少静态连接的应用组成。之所以使用静态连接的应用程序,是因为少量的静态连接的程序比相同数量的动态连接的程序需要更少的存储空间,这种平衡需要在实际开发中获得。

也许你正在设计一个PDA,它有很多应用程序,所以你很可能使用一个动态连接程序来减少存储空间。在/bin或/sbin目录中,查看bash、ifconfig、vi.工厂名单。可能只需要几十k,当你运行ldd /bin/bash的时候,你会看到它们都连接着几个库文件。那么,在这种情况下,我们就要把PC想象成一个嵌入式硬件平台,然后重新打造一个具有特定功能的嵌入式linux。

基础知识在你实际操作之前,先明确几个基础知识。

内核加载器,它的作用是将内核从外部内存移动到内部内存。它只做这件事,一旦它完成了调用内核的工作,Loader就跳到内核位置并开始执行。不同的架构有不同的加载器。在x86 PC上,常用的加载器有LILO、GRUB、syslinux,syslinux也可以在嵌入式linux上工作。在其他非x86架构的应用中,必须使用专门的加载器或者自己编写加载器来加载内核。

也有不使用loader的情况。系统开机后,内核开始直接从带有映像的闪存执行。

内核,内核一旦开始执行,就会通过驱动程序初始化所有的硬件,这一点从我们pc显示器的输出中可以看出来。每个驱动程序打印一些关于它的信息。初始化后,计算机准备运行嵌入式应用程序。也许一个或多个应用组成一个嵌入式应用,但通常是先调用init(先运行的程序可以通过loader把init=/program传递给内核来定制)。

在桌面linux中,init读取/etc/inittab文件来确定执行级别以及哪些脚本和命令。在嵌入式应用中,我们可以根据实际情况决定是否使用标准的init执行模式。可能这个init是一个静态程序,可以完成我们嵌入式应用的具体任务,所以完全不用考虑inittab。

Initrd文件系统,initrd加载一个小文件系统,机制和从存储介质加载内核到内存是一样的。该文件系统优选地以压缩方式存储在介质上,并解压缩到RAM磁盘。

通过使用initrd,一个包含核心驱动程序和启动脚本的小文件系统可以通过内核直接从介质启动。内核压缩这个文件系统,并在这个文件系统上执行一个名为/linuxrc的脚本文件。这个脚本通常会加载启动过程中所需的驱动程序。脚本退出后,initrd文件系统也被卸载,启动过程进入真正的初始化过程。

对于嵌入式系统,所有需要的应用软件都可以在这个initrd文件系统上运行。只要/linxrc文件没有结束,内核启动过程的其他部分就不会继续。

做个实验:CP/boot/initrd-2 . 4 . 20 . img/tmpcd/tmp mv initrd-2 . 4 . 2-。img initrd.img.gz冈兹initrd.img.gz山-o环initrd.img/mntcd/mntlscatlinuxrc,你可以看到两个模块加载。入门测试,制作一个简单的应用程序。

我们用一张软盘启动一个假想的x86架构linux系统,只有一个串口,键盘输入和显示输出,具体应用是运行minicom,通过串口拨号。所需软件:minicom-xx.src.tar.gz和syslinux-xx.tar.gz,xx代表版本号。开始之前,在主目录下建立一个目录,释放这两个软件包:CD mkdir-P Project/mini Linux CD Project/mini Linux tar zxvf minicom-xx . src . tar . gztar zxvf syslinux-xx.tar.gz。

1、在截下linux内核(要求系统安装内核文件包)配置内核时,我们需要选择这些:摸块进内核,386处理器,物理内存关,支持ELF,标准PC软盘,支持RAM磁盘(4096),支持初始RAM磁盘(initrd),虚拟终端控制台,标准串口,ext2文件系统,控制台驱动,VGA文本控制台,DOS FAT,MSDOS文件系统,其他的可以省略,让内核编译的更小。步骤:

Cd/usr/src/Linux make mrprop make xconfig make dep make bzimage get the kernel file bzimge.2、 of /usr/src/linux/arch/i386/boot/directory to compile a static mini-communication. Take it as the future linuxrc CD minicom-xx/srcvi makefile, and modify the following mini-communication: $ (mini-communication object) $ (mini-communication dependency) The line below rm -f mini-communication plus-static, connected as static program (link)-static $ (minicom _ ldflags) $ (minicom _ objects) $ (minicom _ ldadd).

找到if (real_uid==0 dosetup==0)并删除这个主要用于权限判断的判断条件语句,因为这个嵌入式应用并不关注权限问题,否则会出错。Make得到可执行程序,用ldd检查它是否是静态程序。3、准备initrd压缩文件image . gzddif=/dev/zero of=imagebs=1k count=4096 lose setup/dev/loop 0 imagemke2fs-m0/dev/loop 0 moun mt-text 2/dev/loop 0/mnt/mkdir-p/mnt/devmkdir-p/mnt/usr/share/terminfo/l/CD/dev

CP-a consle null tty 0 zero mem/mnt/devcp-P/usr/share/terminfo/l/Linux/mnt/usr/share/terminfo/l/Linux CP ~/project/mini Linux/min com/src/minicom/mnt/linuxrcumount/mntlosetup-d/dev/loop 0 syncgzip-9 image4、制作软盘引导,并拷贝文件bzimage image.gz到软盘A.使用grubfdformat/dev/FD 0 mke 2 fs/dev/FD 0 mount/mnt/fd0/mnt/floppymkdir-p/mnt/floppy/boot/grubcp/boot/grub/stage 1/boot/grub/stage 2/mnt/floppy/boot/grub执行grub,在软盘上创建引导

grub root(fd0)grub setup(fd0)grub quit CP/usr/src/Linux/arch/i386/boot/bzImge/mnt/floppy CP ~/por project/mini Linux/image . gz/mnt/floppy编辑/mnt/floppy/boot/grub/grub . conf default=0 time out-=10 title minilinux root(fd0)内核/bzImageinitrd/image . gzentfernen Sie die Disk设置/mnt/floppyB .使用syslinuxfdformat/dev/FD 0 mkfs . msdos/dev/FD 0 mount-t msdos/dev/fd0/mnt/floppy CP/usr/src/Linux/arch/i386/boot/bzImge/mnt/floppy CP ~/p project/mini Linux/image . gz/mnt/floppy

CP sys Linux-xx/ldlinxu。sys/mnt/floppy cat/mnt/floppy/sys Linux。CFG标签Linux内核bzimage追加initrd=image。gzumont/mnt/floppy sys Linux-xx/sys Linux/dev/FD 0 sync5、用软盘启动计算机,如果幸运,minicom的运行画面出现在屏幕上。

至此,我们的单应用嵌入式linux做好了,但是还是很简单,没什么用,但是通过这个实验,我们可以了解嵌入式系统的大致结构和开发流程。在实际的嵌入式开发中,通常需要借助嵌入式linux开发工具包,如uclinux、bluecat等,在PC上编译相应硬件平台(目标机)的软件。调试成功后,将内核和应用程序写入目标机的内存,从而完成整个应用。

以上知识分享希望能够帮助到大家!