热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

嵌入式Linux学习笔记

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

注:所有内容基于友善之臂Mini2440开发板

一、嵌入式Linux开发环境的构建

嵌入式开发一般分为三个步骤:

1、编译bootloader,烧到开发板

2、编译嵌入式Linux内核,烧到开发板

3、编译各类应用程序,烧入开发板

软件环境构建

采用主机windows,虚拟机CentOS上作为开发环境,虚拟机的安装和Linux安装就不说了。

安装好后Linux应该配置samba服务,挂载windows下的代码共享目录

安装交叉编译工具链

对于嵌入式Linux,程序都是下到开发板上运行,开发板和cpu相关的体系架构与x86系列的都不一样,所以不能用常规的gcc来编译,必须用专门的交叉编译工具

对于Mini2440,采用的是arm9处理器,使用友善之臂官方提供的编译工具在光盘中有提供,下载地址: 2011-09/43527.htm

下载以后解压到根目录

# tar xvf arm-linux-gcc-4.3.2.tgz -C /

也可以自行编译交叉工具链,但是过程繁琐,容易出错,我们还是把重点放在开发上。

二、嵌入式编程基础知识

一般的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 {

        . = 0x30000000;

        .text        :        { *(.text)}

        .rodata ALIGN(4)    :  { *(.rodate) }

        .data ALIGN(4)        :  { *(.data) }

        .bss ALIGN(4)         :  { *(.bss) *(COMMON) }

}

第二行表示当前运行地址为0x30000000,第三行定义了.text段,内容为*(.text),表示所有输入文件的代码段,起始运行地址为0x30000000

第四行定义了.rodata段,代码紧挨.text,ALIGN(4)表示起始地址4字节对齐如果.text为0x30000000-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介绍

1)格式:

目标 : 依赖

命令

例:

hello: hello.c

        gcc -o hello hello.c

clean:

        rm -f hello

2)赋值方法

延时变量:使用时才展开

var = value

var ?= value(变量未定义才有效,即定义第一次出现的延时变量)

立即变量:定义时值就确定

var := value

对于 var += value 右边变量如果前面使用:=定义为立即变量,则它是立即变量,否则为延时变量

3)Makefile常用函数

 略,太多了,用到时再介绍


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
author-avatar
米米丫头2502860283
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有