❶ 嵌入式linux系统开发详解_嵌入式linux系统介绍
嵌入式Linux开发从下到上分为:嵌入式硬件开发、嵌入式驱动开发、嵌入式系统开发、嵌入式软件开发。
一、嵌入式硬件开发:熟悉电路等知识,非常熟悉各种常用元器件,掌握模拟电路和数字电路设计的开发能力。熟练掌握嵌入式硬件知识,熟悉硬件开发模式和设计模式,熟悉ARM32位处理器嵌入式硬件平台开发、并具备产品开发经验。精通常用的硬件设计工具:Protel/PADS(PowerPCB)/Cadence/OrCad。一般需要有4~8层高速PCB设计经验。
二、嵌入式驱动开发:熟练掌握Linux操作系统、系统结构、计算机组成原理、数据结构相关知识。熟悉嵌入式ARM开发,至少掌握Linux字符驱动程序开发。具有单片机、ARM嵌入式处理器的移植开发能力,理解硬件原理图,能独立完成相关硬件驱动调试,具有扎实的硬件知识,能够根据芯片手册编写软件驱动程序。
三、嵌入式系统开发:掌握Linux系统配置,精通处理器体系结构、编程环境、指令集、寻址方式、调试、汇编和混合编程等方面的内容;掌握Linux文件系统制作,熟悉各种文件系统格式(YAFFS2、JAFFS2、RAMDISK等);熟悉嵌入式Linux启动流程,熟悉Linux配置文件的修改;掌握内核裁减、内核移植、交叉编译、内核调试、启动程序Bootloader编写、根文件系统制作和集成部前胡署Linux系统等整个流程;、熟悉搭建Linux软件开发环境(库文件的交叉编译及环境配置等);
四、嵌入式软件开发:精通Linux操作系统的概念和安装方法、Linux下的基本命令、管理配置和编辑器,包括VI编辑器,GCC编译器,GDB调试器和Make项目乎悔败管理工具等知识;精通C语言的高级编程知识,包括函数与程序结构、指针、数组、常用算法、库函数的使用等知识、数据结构的基础内容,包括链表、队列等;掌握面向对象编程的基本思想,以及C语言的基础内容;精通嵌入式Linux下的程序设计,精通嵌入式Linux开发环境,包括系统编程、文件I/O、多进程和多线程、网络编程、GUI图形界面编程、数据库;熟悉常用的岁颤图形库的编程,如QT、GTK、miniGUI、fltk、nano-x等。
所以如果你要做嵌入式软件开发的话,上面那些知识基本够用了。
❷ 关于嵌入式Linux系统
1.1嵌入式Linux系统硬件环境
图4.1开发环境硬件连接
通常基于嵌入式linux系统的开发环境一般由目标机、开发板、交叉编译工具链、远程调试工具和下载机制组成。本课题的工作是在装有linux操作系统(RedHat9.0)的目标机和基于S3C2410a的目标板上进行的。
设置串行接口
串行接口主要是用来埋氏目标板发送命令并监测目标板在程序运行过程中的输出信息。
要讲开发板COM1口与PC机的COM口分别用串口线连接好,而在主机端,用minicom与armsys2410用串口线连接好后进行通讯。
首先,设置minicom。用键盘在命令行输入minicom,输入后选定Serialportsetup然后按设置健A健设置SerialDevice,接着输入PC上接入的串行接口号,如果这个系统与串口1相接,相应写入/dev/ttyS0。接着需要设置传输速率,我们需要设置的传输速率为11520,按下E键,设置波特率为11520,设置完成后,没有奇偶校验,没有软件控制流和硬件控制流。设置完成后,选择为默认设置并保存退出。
设置完成后讲开发板复位,这时系统就会显示系统启动打印的信息。
1.2嵌入式linux系统软件环境
笔者的研究方向主要着重点在于嵌入式linux系统的软件开发层面。嵌入式linux系统可以开发的上层软件多种多样,如果从从软件分慧液段析的角度来看大致可以分为四个层次:
一、操作系统的引导。操作系统中要有引入加载程序,主要包括固件(firmware)和Bootloader(引导加载程序)两部分。
二、系统的管控内核。为了更好的分配系统资源,必须要对特定的硬件平台和实际应用移植操作前誉系统linux,这是进程管理的一个重要的部分,这里主要包含了定制内核以及控制内核引导系统的参数。
三、系统文件的引导建立。文件的建立是指文件存在的物理空间,linxu系统中每一个分区都是一个文件系统,都包含自己的目录层次结构,这其中也包括根文件系统(RamDisk)和建立于Flash之上的文件系统。一个系统的操作离不开文的操作,因此要有而且要维护自己的文件系统。
四、软件上的程序用户。经过多年的积累和开发,在自由软件中不断努力的人们为开放源码领域贡献了许多优秀的软件。针对客户的不同需求,为客户量身打造,甚至可以加入图形界面,可以更方便用户的使用。但是嵌入式linux系统不管如何构建,都离不开以下几点:
1)在嵌入的目标机装上交叉编译工具。
2)Bootloader是依赖于开发板硬件而实现编写的。
3)根据客户需求编译嵌入式Linux内核和裁剪冗余。
4)根据客户需要和系统运行的需要来编写设备驱动程序和嵌入式linux应用程序。
5)最后也是最重要的一个部分构建系统文件的目录。
❸ 嵌入式Linux 如何拷贝
然后在/dev/ram0中建立映像需要的目录和文件。创建目录bin、dev、etc、lib、mnt和可执行脚本文件linuxrc,linuxrc的内容为:
#!/bin/bash
mount –o –ro /dev/hda1/ /mnt # 以只读方式将flash盘挂载在/mnt下
zcat /mnt/boot/ram30.img.gz > /dev/ram # 将根文件系统映像仔陵解压至ram
umount /dev/hda1 # 卸载flash盘
bin下面为linuxrc中用到的命令;lib为这些命令需要的动态链接库;etc下为配置文件ld.so.conf,定义命令运行时寻找所需动态链接库的路径,运行命令ldconfig –r /mnt/ram产生文件ld.so.cach,在命令和动态链接库之间建立对应关系;dev下基本终端设备和linuxrc中用到的设备:console、ram、null、systty、tty1、tty2和hda1;mnt为hda1的挂载点。最后创建压缩的initrd ramdisk映像。
运行df 看看/dev/ram0的字节数,在我的计算机上1684KB;扰宽转换当前目录至/root并卸载/dev/ram0 umount /dev/ram0;拷贝/dev/ram0成映像文件 dd if=/dev/ram0 of=initrd.img bs=1k count=1684;产生压缩的映像文件initrd.img.gz,运行gzip -9v initrd.img。
3.3启动
系统的启动需要依靠flash盘,通过LILO把系缓戚亮统启动信息写入flash盘主引导区。将flash盘作为第一主盘hda,而将装有普通Linux的硬盘作为第一从盘hdb并从它启动。在flash硬盘上创建ext2文件系统,将它挂载至/mnt/flash目录。在flash盘上建立boot目录,将压缩的文件系统和initrd映像拷贝至boot目录下,同时将Linux内核、引导区记录boot.b、引导区映射map拷贝至其下。在普通Linux系统中建立LILO配置文件ramlilo.conf,配置文件如下:
boot=/dev/hda
map=/mnt/flash/boot/map
install=/mnt/flash/boot/boot.b
prompt
timeout=50
image=/mnt/flash/boot/vmlinuz
append= “ramdisk_size=30000”
label=embedded
root=/dev/ram
initrd=/mnt/flash/boot/initrd.img.gz
运行命令lilo –C ramlilo.conf ,将启动信息写入flash的主引导区MBR。重新启动计算机,登陆后运行mount,我们看到如下两项:
/dev/ram on / ext2 (rw)
none on /proc type proc (rw)
这显示只有ramdisk被挂载,制作成功。
❹ 作为一个新人,怎样学习嵌入式Linux
先学会基本操作
Linux学习要点(转载自红联)
一、学习Linux的基本要求
1. 掌握至少50个以上的常用命令。
2. 熟悉Gnome/KDE等X-windows桌面环境操作 。
3. 掌握.tgz、.rpm等软件包的常雹山用安装方法
4. 学习添加外设,安装设卜笑备驱动程序(比如网卡)
5. 熟悉Grub/Lilo引导器及简单的修复操作 。
6. 熟悉Linux文件系统 和目录结构。
7. 掌握vi,gcc,gdb等常用编辑器,编译器,调试器 。
8. 理解shell别名、管道、I/O重定向、输入和输出以及shell脚本编程。
9. 学习Linux环境下的组网。
二、Linux常用命令
安装和登录命令:login、 shutdown、 halt、 reboot 、mount、umount 、chsh
文件处理命令:file、 mkdir、 grep、dd、 find、 mv 、ls 、diff、 cat、 ln
系统管理相关命令: df、 top、 free、 quota 、at、 lp、 adser、 groupadd kill、 crontab、 tar、 unzip、 gunzip 、last
网络操作命令:ifconfig、 ip 、ping 、 netstat 、telnet、 ftp、 route、 rlogin rcp 、finger 、mail 、nslookup
系统安全相关命令: passwd 、su、 umask 、chgrp、 chmod、chown、chattr、sudo、 pswho
三、Linux下常用软件
[媒体播放]
1)divx影片:mplayer
2)rm影片:realplayer10 for linux, mplayer
3)mp3: xmms,beep media player, mplayer
4)ape: xmms+monkey's audio plugin(http://supermmx.org/linux/mac/)
5)其他格式(wma, wmv, mkv, quicktime): mplayer 各种格式的文档和文件
[文件浏览]
1)打开微软的office文档: openoffice, starsuite
2)查看pdf文件:acroread for linux, kpdf, xpdf, ggv
3)查看ps文件: gsview, ggv, kghostview
4)chm文件: archmage,chmsee, Xchm,chmviewer
5)mht文件: ripmime,firefox+MAF插件
6)图表绘制: dia (等同于visio)
7).bin虚拟光盘: 用bin2iso或bchunk转成iso后mount
8)压缩文件
.rar: rar for linux或unrar
.zip: unzip
.bz2: bunzip2
.tar/.tgz: tar
[中文输入法]
1)scim
2)fcitx
[网络软件]
1) QQ: lumaqq, Gaim+openq plugin
2) MSN,icq,yahoo: Gaim
3) web浏览器:mozilla-firefox, mozilla, opera
4) ftp客户端(图形界面) :gftp, Iglooftp
5) ftp客户端(终端) :源弊中 lftp, ncftp
6) ftp服务器: pureftpd, proftpd, vsftpd
7) http下载(终端): wget, curl, prozilla
8) bt下载: bittorrent(终端), azureus(图形界面)
9) email软件(图形界面):KMail, thunderbird, sylpheed, evolution, opera M2
10) email终端: mutt, pine, gnus
11) RSS:liferea, aKregator
12) BBS:qterm, {rxvt,xterm,gnome-terminal,...}+BBSbot
[编辑器]
1) 文本: vim, emacs, jedit
2) 16进制: hexedit, ghex, mc
3) 图片浏览: gImageView, gqview
4) 图片处理: gimp, ImageMagick
5) 音频处理: audacity
[常用工具]
1)英汉字典: stardict(屏幕取词,词库大,英汉,汉英, 英英)
ibmdict(包含科技词典,词库大,英汉,汉英)
dictd:英汉 汉英 可以使用stardict的全部词库
cdict:英汉 汉英 使用安装方便,彩色显示.
2)科学计算:matlab, octave
3)科学作图:gnuplot, metapost
[虚拟机]
1) win下虚拟linux: cygwin, virtual-pc, colinux
2) linux下虚拟win: win4lin
3) 跨平台: vmware, bochs
4) linux下运行windows程序: wine, winex, crossover office
5) console下的中文环境: zhcon, cce
❺ Linux嵌入式中,进入一个目录的指令中,&&. 这个代码是什么意思有什么意义
1 命令之间使用 && 连接,闷老实现逻辑与的功能。
2 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。
3 只要有一个命令返回假(命团罩缓令返回值 $? == 1),后面的命令就不会被执行。
www.2cto.com
示例 1
malihou@ubuntu:~$ cp ~/Desktop/1.txt ~/1.txt && rm ~/Desktop/1.txt && echo "success"
示例 1 中的命令首先从 ~/Desktop 目录复制 1.txt 文件到 ~ 目录;执塌模行成功后,使用 rm 删除源文件;如果删除成功则输出提示信息。
❻ 嵌入式linux:很简单的汇编指令,关于LDR R0,R1
答案是B.
确切地说做唤是,R1的数据+R2的数据合虚帆成一个地址值,该地址中存放的数据赋值给R0
LDR指令是从纯誉凯某存储空间取数据,赋值给某寄存器.
这是ARM汇编,和Linux有什么关系?
建议看看ARM汇编的解释
❼ 在嵌入式Linux设备上如何安装一些命令,例如yum等
所有的命令其实都是程序,除了 sh 内建的有限的几个命令。
所以你明白了没?想要用 yum ,那就去给你这个嵌入式设备装 yum 程序。
很多命令都要去针对的编译安装。嵌入式在开发逻辑上,你需要什么命令,就去编译什么命令的支持程序。而不是去找已经做好的二进制程序。那是 Linux 用户而不是开发者的想法。
不过我可以告诉你,嵌入式用 yum 根本不实际。因为嵌入式 Linux 系统是针对性很强的系统,这种针对性对于嵌入式系统开发者来说,控制软件组成基本是确定的工作。桌面 Linux 的 yum 是由这个操作系统的制作者们进行系统整体软件组成及管理的一个程序,他主要的是提供一个在线软件仓库的功能。因为 yum 本身是基于 rpm 再开发的类 deb 在线仓库程序。rpm 本身没有在线软件库的功能功能。只是一个简单的软件包管理,依赖管理程序。
但你一个嵌入式系统,却非要去用 yum 。难道你想做一个基于 arm 的桌面操作系统?嵌入式很多情况下,连软件包管理器都不需要。更何况这种在线软件仓库?
就算你想弄软件仓库,那你的软件顶多是应用程序仓库,类似 android 的软件商店就足够了。根本不需要 yum 这种支持依赖管理等等各种的功能。而且一套 yum 和 rpm 的支持库,就可以吃掉你的嵌入式设备的大部分存储空间。而且为了实现 yum 的主要功能你还要去维护一个 yum 软件仓库服务器才行。
有那功夫自己写一个软件管理器都来得及。本身嵌入式系统就不需要太多的软件包管理功能。
❽ 请简述嵌入式linux内核的编译过程
编译及安装简要步骤:
编辑Makefile版本信息
定义内核特性,生成配置文件.config,用于编译:make xconfig
编译内核:make
安装内核:make install
安装模块:make moles_install
具体步骤如下:
内核配置
先定义内核需要什么特性,并进行配置。内核构建系统(The kernel build system)远不是简单用来构建整个内核和模块,想了解更多的高级内核构建选项,你可以查看 Documentation/kbuild 目录内的内核文档。
可用的配置命令和方式:
make menuconfig
命令:make menuconfig
编译内核
编译和安装内核
编译步骤:
$ cd /usr/src/linux2.6
$ make
安装步骤 (logged as
$ make install
$ make moles_install
提升编译速度
多花一些时间在内核配置上,并且只编译那些你硬件需要的模块。这样可以把编译时间缩短为原来的1/30,并且节省数百MB的空间。另外,你还可以并行编译多个文件:
$ make -j <number>
make 可以并行执行多个目标(target)(KEMIN:前提是目标规则间没有交叉依赖项,这个怎么做到的?)
$ make -j 4
即便是在单处理器的工作站上也会很快,读写文件的时间被节省下来了。多线程让CPU保持忙碌。
number大于4不见得有效了,因为上下文切换过多反而降低的工作的速度。
make -j <4*number_of_processors>
内核编译tips
查看完整的 (gcc, ld)命令行: $ make V=1
清理所有的生成文件 (to create patches...): $ make mrproper
部分编译:$ make M=drivers/usb/serial
单独模块编译:$ make drivers/usb/serial/visor.ko
最终生成的文件
vmlinux 原始内核镜像,非压缩的
arch/<arch>/boot/zImage zlib压缩的内核镜像(Default image on arm)
arch/<arch>/boot/bzImage bzip2压缩的内核镜像。通常很小,足够放入一张软盘(Default image on i386)
❾ linux启动app命令
linux启动app命令:做 Linux 嵌入式开发,经常会遇到要设置自己的应用程序在系统开机的时候自动启动,并且一般情况我们不想安装一些额外的软件去实现此种需求。那么直接根据当前系统自带的默认的一些工具实现用户软件的开机自启动。
本次测验的系统环境为 Ubuntu 16.04 LTS,测试内容均得到正确的验证,如果其他环境出现不一致的现象,请查阅相关的差异。
比如先要实现下面的应用程序的开机自启动(实现的代码最下面给出,有需要的可以查看):
1. 应用程序的名称:app.bin
2. 应用程序的保存路径:/home/ubuntu/app/ 下
3. 应用程序的工作路径:/home/ubuntu/app/ 下
❿ 如何用嵌入式linux操作系统的命令来复制整个目录
cp命令
功能:将给出的文件或目录拷贝到另一文件或目录中,就如同DOS下的命令一样,功能非常强大。
语法:cp [选项] 源文件或目录 目标文件或目录
备知说明:该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。
参数:
- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,并递归地拷贝目录,其作用等于dpR选项的组合。
- d 拷贝时保留链接。
- f 删除已经存在的目标文件而不提示。
- i 和f选项相反,在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖,是交互式拷贝。
- p 此时cp除复制源文件的内容外,还将把其修改时间和访问权限也复制到新文件中。
- r 若给出的源文件是一目录文件,此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。
- l 不作拷贝,只是链接文件。
需要说明的是,为防止用户在不经意的情况下用cp命令破坏另一个文件,如用户指定的目标文件名是一个已存在的文件名,用cp命令拷贝文件后,这个文件就会被新拷贝的源文件覆盖,因此,建议用户在使用cp命令拷贝文件时,最好使用i选项。
$ cp - i exam1.c /usr/wang/shiyan1.c
仿谈消该命令将文件exam1.c拷贝到/usr/wang 这个目录下,并改名为 shiyan1.c。若不希望重新命名,可以使用下面的命令:
$ cp exam1.c /usr/ wang/
$ cp - r /usr/xu/ /usr/liu/ 将/usr/xu目录中的所有文件及其子目录拷贝到目录/usr/liu中。
mv命令
功能:为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同DOS下的ren和move的组合。
语法:mv [选项] 源文件或目录 目标文件或目录
说明:视mv命令中第二个参数类型的不同(是目标文件还是目标目录),mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时,mv命令完成文件重命名,此时,源文件只能有一个(也可以是源目录名),它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时,源文件或目录参数可以有多个,mv命令将各参数指定的源文件均移侍哗至目标目录中。在跨文件系统移动文件时,mv先拷贝,再将原有文件删除,而链至该文件的链接也将丢失。