一、构建嵌入式开发环境
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常用函数
函数调用以“$”开头,以圆括号或花括号把函数名和参数括起。感觉很像一个变量,是不是?函数中的参数可以使用变量,
为了风格的统一,函数和变量的括号

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

  1. linux基础知识的总结

    例如以下内容是我对linux基础知识的总结,由于本人在初期学习linux的时候走了不少的弯路,对于基础的掌握耗费了不少的时间,所以为了后来者对linux的基础部分有个清晰的了解,特对基础知识进行了总结 ...

  2. 嵌入式LINUX基础教程 第2版

    嵌入式LINUX基础教程  第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...

  3. Linux基础知识入门

    [Linux基础]Linux基础知识入门及常见命令.   前言:最近刚安装了Linux系统, 所以学了一些最基本的操作, 在这里把自己总结的笔记记录在这里. 1,V8:192.168.40.10V1: ...

  4. 运维之linux基础知识(一)

    运维之linux基础知识(一) 1.GUI:Graphic User Interface 图形用户界面 2.CLI:Command line Interface 命令行界面 3 dll:Dynamic ...

  5. 运维之Linux基础知识(三)

    运维之Linux基础知识(三) 1. 查看文本 cat tac more less head tail 1.1 cat 连接并显示文件 cat -n:在显示的时候,将每一行编号 -E:显示结束符$ - ...

  6. Linux基础知识梳理

    Linux基础知识梳理 Linux内核最初只是由芬兰人林纳斯?托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的.Linux是一套免费使用和自由传播的类Unix操作系统,是 ...

  7. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  8. Linux基础知识第八讲,系统相关操作命令

    目录 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 2.磁盘信息查看. 3.系统进程 Linux基础知识第八讲,系统相关操作命令 一丶简介命令 时间和日期 date cal 磁盘和目录空间 ...

  9. Linux基础知识第七讲,用户权限以及用户操作命令

    目录 Linux基础知识第七讲,用户权限以及用户操作命令 一丶简介linux用户,用户权限,组的概念. 1.1 基本概念 1.2 组 1.3 ls命令查看权限. 二丶用户权限修改命令 1.chmod ...

随机推荐

  1. Linux VFS分析(二)

    inode的管理:Inode-cache hash表inode_hashtable索引节点缓存 dentry的管理: 我们知道,若干dentry描绘了一个树型的目录结构,这就是用户所看到的目录结构,每 ...

  2. spring cloud(三) config

    spring cloud 配置中心 config 搭建过程 1.搭建config-server 服务端 1.1. 新建boot工程 pom引入依赖 <!-- config配置中心 --> ...

  3. vc++如何创建程序-构造和继承

    #include<iostream.h>//定义一个动物类class Animal{public: void eat();//添加方法 { cout<<"animal ...

  4. linux笔记常用命令

    LINUX成长日记 1.本人工作实例:(将一台服务器的数据库复制到另外一台服务器上) scp -r -P 8351 /bak_mysql/sz_b2b2c201705180200.sql root@1 ...

  5. nginx安装http2.0协议

    1.HTTP2协议 HTTP 2.0 的主要目标是改进传输性能,实现低延迟和高吞吐量.从另一方面看,HTTP 的高层协议语义并不会因为这次版本升级而受影响.所有HTTP 首部.值,以及它们的使用场景都 ...

  6. C语言基础 (6) 类型转换,数组与随机数

    复习 1.隐式转换 Double a Int b = 1 A = b //编译器自动转换把b转换为double类型后 再给a赋值(隐式转换) 2.强制类型转换 (变量)类型名 Int a = 1 // ...

  7. zabbix监控websphere的几个监控项

    首先,我要吐槽一下这个AIX系统,这该死的天杀的玩个锤子象拔蚌的系统,没有自动补齐,删除文本字符也跟linux不一样,这让用惯的linux的我各种蓝瘦. 这个问题是在项目中遇到的,由于没有接触过AIX ...

  8. base64格式文件下载方法

    下载图片时,接口返回的地址是base64格式的文件数据,因为页面需要把base64格式的数据转换为文件,再进行下载: 解决方案: 下载按钮: <el-button type="defa ...

  9. Elasticsearch 入门 - Exploring Your Cluster

    The REST API Cluster Health ( http://localhost:9200/ ) curl -X GET "localhost:9200/_cat/health? ...

  10. PHP学习总结(3)——PHP入门篇之PHP的echo语句

    Echo语句 echo是PHP中的输出语句,可以把字符串输出(字符串用双引号括起来). 如下代码: <?php echo "Hello world!";?> 注意ech ...