一、构建嵌入式开发环境
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. ML二:python批量修改文件名-测试KDTree

    (1):#批量修改文件名 import os import numpy as np import string import shutil prefix =''#单引号,前缀! sufix ='txt ...

  2. Django使用中常见的错误

    Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED   Django 执行makemigrations  的时候报错 ...

  3. Corn Fields 状压动归入门题

    #include<cstdio> using namespace std; const int N=15; int dp[N][1<<N],v[1<<N],M[N] ...

  4. 路飞学城Python-Day113

      107-HTTP协议的无状态保存 什么是无状态保存? HTTP无状态请求就是客户端每次发送的请求都是单独的新请求,每一次请求都是独立的,这样的特点在网站上就是服务器登录的时候记录浏览器的信息,建立 ...

  5. Python笔记12-----画图Matplotlib

    1.matplotlib:pyplot和pylab 如: import pylab as pl pl.figure(figsize=(8,6),dpi=100)[建立的图像大小和图的精度] pl.pl ...

  6. Project Euler 30 Digit fifth powers

    题意:判断一个数 N 的每一位的5次方的和是否为其本身 ,求出所有满足条件的数的和 思路:首先设这个数 N 为 n 位,可以简单的判断一下这个问题的上界 10 ^ n <= 9 ^ 5 × n, ...

  7. ansible自动化部署

    ansible通过模块实现批量管理及部署服务器,功能有模块实现 ansible无需在被控端安装agent/client,因为ansible是通过ssh分发ad-hoc(单条指令)或者palybook( ...

  8. 在Tomcat中配置域名:linux下的配置

    域名的配置 端口要改成80 找到/usr/tomcat/apache-tomcat-8.5.30/conf的目录,找到server.xml文件,到 <Host name="localh ...

  9. Linux 程序包管理-YUM

    前端工具YUM管理程序包:  rpm管理软件虽然方便,但是需要手工解决软件包的依赖关系:很多时候安装一个软件需要首先安装一个或多个(有时多达上百个)其它软件,手工解决很复杂:使用yum可以解决这个问题 ...

  10. 谷歌翻译使用php curl请求接口文档

    支持语言 阿拉伯语代码 ar 英语代码 en 中文(简体)代码 zh-CN php中curl类常用方法封装和详解 REST API Method translate POST /language/tr ...