嵌入式Linux基础知识

一、构建嵌入式开发环境
1、编译bootloader并烧写到板子中---uboot, 可以自己定制bootloader and logo
2、编译file system 并烧写--内嵌APP
3、编译linux kernel----定制drivers and logo
4、编译APP
5、编译file system 备份---内嵌APP
6、安装交叉编译工具
7、安装调试工具

二、嵌入式编程基础知识

一般的c/c++文件要变成可执行文件需要经过预处理、编译、汇编、和连接等4个步骤
1)预处理
以#开头的为预处理命令,如包含命令#include、宏定义#define、条件编译#if #ifdef,预处理的目的是将所有include文件插入到源文件中、将宏定义展开、
条件编译成立的选择使用的代码,最后将所有代码输入到.i文件中等待处理,预处理需要用到arm-linux-cpp工具

2)编译
把所有c/c++代码(上面的.i文件)翻译成汇编代码,用到工具为ccl

3)汇编
将前面的汇编代码翻译成一定格式的机器码,Linux上一般为ELF目标文件,用到工具为arm-linux-as

4)连接
连接就是将上面生成的obj文件和系统库的obj文件、库文件连接起来,最终生成在平台上可执行文件,用到工具为arm-linux-ld

arm-linux-gcc选项
1)-c
预处理、编译和汇编源文件,不做连接,编译器生成obj文件,gcc通过.o替换.c .i .s等
2)-S
编译后即停止,不进行汇编,gcc用.s替换.c .i等
3)-E
预处理后停止,不进行编译,预处理代码到标准输出
4)-o file
指定输出file文件
5)-v
显示gcc版本,编译细节
6)-Wall
打开警告选项
7)-g
打开调试选项,可用gdb调试
8)-llibrary
连接名为library的库文件,真正名字为liblibrary.a
9)-static
静态编译
10)-shared
生成共享obj文件
11)-Idir
指定dir为头文件搜索目录
12)-Ldir.
指定dir为库文件搜索目录

arm-linux-ld选项
1)-T
指定代码段(-Ttext),数据段(-Tdate),bss段(-Tbss)的起始地址
使用连接脚本(-Txxx.lds)

例:
SECTIONS {
. = 0×30000000;
.text : { *(.text)}
.rodata ALIGN(4) : { *(.rodate) }
.data ALIGN(4) : { *(.data) }
.bss ALIGN(4) : { *(.bss) *(COMMON) }
}

第二行表示当前运行地址为0×30000000,第三行定义了.text段,内容为*(.text),表示所有输入文件的代码段,起始运行地址为0×30000000
第四行定义了.rodata段,代码紧挨.text,ALIGN(4)表示起始地址4字节对齐如果.text为0×30000000-0x300003f1,则.rodata地址为0x300003f4

arm-linux-objcopy选项,此命令用来复制一个目标文件内容到另一个文件中,可进行格式转换
例:将ELF格式转换成二进制文件
arm-linux-objcopy -O binary -S elf_file bin_file

arm-linux-objdump选项, 常用来查看反汇编代码
ELF转反汇编
arm-linux-objdump -D elf_file > dis_file
二进制转反汇编
arm-linux-objdump -D -b binary -m arm bin_file > dis_file

三、 Makefile 编译文件------以后补充

Makefile介绍
1)格式:
目标 : 依赖
<tab>命令
例:
hello: hello.c
gcc -o hello hello.c
clean:
rm -f hello

2)赋值方法
延时变量:使用时才展开
var = value
var ?= value(变量未定义才有效,即定义第一次出现的延时变量)
立即变量:定义时值就确定
var := value
对于 var += value 右边变量如果前面使用:=定义为立即变量,则它是立即变量,否则为延时变量
3)Makefile常用函数
函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。感觉很像一个变量,是不是?函数中的参数可以使用变量,
为了风格的统一,函数和变量的括号

时间: 2024-10-10 17:00:04

嵌入式Linux基础知识的相关文章

嵌入式Linux基础知识0(什么是真正的实时操作系统--硬实时 软实时)

需求说明:IPC项目需要Linux系统,知识储备 来自:http://blog.csdn.net/zhourui1982/article/details/5282361 阅读精华整理: 1.根据实际应用,可以选择采用硬实时操作系统或软实时操作系统,硬实时当然比软实时好,但是,如果你的公司正在准备开发一款商用软件,那请你注意了,业界公认比较好的VxWorks(WindRiver开发),会花光你本来就很少的银子,而软实时的操作系统,如某些实时Linux,一般是开源免费的,我们公司本来的产品就是基于V

linux基础知识的总结

例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结,由于水平有限.难免有疏忽或者不准确的地方.希望大家可以直接指出来,我会及时改正.一切为了知识的传播.^_^ ? *********************************************************************************************

1、linux基础知识

第一天linux基础知识 1:linux操作系统组成 linux内核+GNU工具=完整的类UNIX系统 GNU工具(GNU软件是通过GNU项目发布的软件,它是一种根据GNU软件包的README手册以及自由软件指南开发的软件,大多数GNU软件是免费分发的,但不是所有的都这样,然而,所有的GNU软件必须是自由软件.) 2:linux发行版  slackware debian  reehad  Gentoo等 3:linux哲学思想 一切皆文件(硬件也已文件的形式展现在操作系统中) 小型,单一用途程序

Linux基础知识题解答(五)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (1)155729 -rw-r--r--.  1 root root   35 Oct 28 2011  oldboy 请解析上面的每一列内容 文件inode号,文件访问权限,硬链接数,文件所属用户,文件所属组,文件最后修改时间,文件名 (2)描述下硬链接和软连接的区别 1.硬链接原文件/链接文件共用

linux基础知识第一节

用户接口: 是一种独特的应用程序,能够为用户提供启动其它应用程序的的机制 cli:命令提示符,用户输入要执行的命令即可, shell: 外壳 sh ,csh ,ksh ,   bash, zsh , tcsh gui: 通过点击操作来启动应用程序 gnome,  mainframe  大型机 多用户操作系统    多终端   终端:设备,显示器,鼠标,键盘 虚拟终端 表示:/dev/tty# ctrl-alt-f(1-6) 物理终端(控制终端)console 串行终端 伪终端 /dev/pts#

Linux基础知识(2)

Linux基础知识: 一.程序管理: (1)程序的组成部分: (2)二进制程序: (3)配置文件: (4)库文件: (5)帮助文件: 二.程序包管理器: X: (1)程序的组成文件打包成一个或有限几个文件: (2)安装: (3)卸载: (4)查询: 三.安装Linux: 虚拟机安装Linux系统 需要设置计算机的CPU, 内存, IO等 四.虚拟化软件程序: vmwareworkstation和virtualbox虚拟机都可以安装系统 五.CentOS的镜像站点: http://mirrors.

第二天linux基础知识

第二天linux基础知识 1:终端(用户与主机交互必然用到的设备) 物理终端:直接接入本机的设备 虚拟终端:以软件的方法虚拟实现的终端. 图形终端:属于虚拟终端 模拟终端:图形打开的命令行或基于远程登录协议打开的终端. 查看当前终端设备命令:tty 2:交互式接口(启动终端后,在终端附加的一个交互式程序) GUI:Graphic User Interface CLI:Command Line Interface 3:SHELL(shell是linux系统的用户界面,提供了用户与内核进行交互操作的

linux基础知识题解答(九)

题目来自老男孩BLOG:http://oldboy.blog.51cto.com/2561410/1709569,比较适合新手,空余的时候做一下,可以巩固Linux基础知识,有不对的地方欢迎指正. (Linux用户权限-磁盘-网络) (1)列出 IPv4 的网络地址的分类,各分类容纳的网络数和主机数,以及前三类中的私有地址. A类:1~126,私有地址10.0.0.0~10.255.255.255 B类:128~191,私有地址172.16.0.0~172.31.255.255 C类:192~2

linux基础知识---用户

用户和组 一.用户和组的概念 随着计算机对多用户需求越来越多,才引入了用户和组的概念.所谓的用户就是操作系统用来标识登陆系统的.就是用户和组是实现计算机资源分配的核心要素.组:是具有相同计算机资源(主要指权限)用户的一个集合. 在计算机内核中,用户和组都是一个数字,我们称之为UID和GID.UID和GID在系统中具有唯一性.实现这个过程进行名称解析才能完成,在Linux系统中使用glib库中的系统调用来完成. 二.用户识别 识别用户通过3A(Authentication,Authorizatio