一、构建嵌入式开发环境
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. 计算机二级考试Access教程

    本教程对编程语言各种要点进行详细的讲解介绍,从基础知识到实用技术功能,内容涵盖了从数组,类等基本概念到多态.模板等高级概念.教程本着实用的原则,每一小节都结合了可以笔试.面试的常见程序实例,以便从第一 ...

  2. Struts2学习笔记 - Part.02

    ================Struts2的国际化================程序国际化: 程序可以根据极其所在的国家.语言环境,自动显示当前国家.语言的内容国际化的本质是:查找.替换国际化的 ...

  3. STL:使用string、vector、complex和limits

    (有少量修改!)使用到了STL的算法库: #include<algorithm> #include<vector> //属于STL库 模板库 写库的人为了和标准C和C++库区分 ...

  4. 考考你对java多态的理解

    请看如下代码, 如果你能不运行得出正确答案, 那你真的超过99%的java程序员了. [本人属于最大头的那部分] public class A{ public String s = "A&q ...

  5. codeforces 789 B. Masha and geometric

    链接 B. Masha and geometric depression 题意 给你一个等比数列的首项和公比q,然后给出一个上限l,m个数字,在这个等比数列里,小于l且没有在m个数字里面出现过的可以写 ...

  6. Connection refused (SQL: select * from information_s chema.tables where table_schema = apidemo and table_name = migrations)

    LARAVEL 执行: $ php artisan migrate 报错 ,把 .env文件里的 DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306 换成 ...

  7. vue 函数配置项watch以及函数 $watch 源码分享

    Vue双向榜单的原理     大家都知道Vue采用的是MVVM的设计模式,采用数据驱动实现双向绑定,不明白双向绑定原理的需要先补充双向绑定的知识,在watch的处理中将运用到Vue的双向榜单原理,所以 ...

  8. 训练1-X

    输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数. Input 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数.n ...

  9. P1546 最短网络 Agri-Net (kruskal)

    题目背景 农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场.当然,他需要你的帮助. 题目描述 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其 ...

  10. seliux(类似防火墙,限制root用户)

    注:如果在开发是不设置关闭,可能会出现很多不在预期内的效果 路径:/etc/selinux/config *修改(修改时拷贝对照) (拷贝):cp /etc/selinux/config /etc/s ...