LCD实验学习笔记(一):Makefile

发布者:吉州古玩斋最新更新时间:2023-06-15 来源: elecfans关键字:LCD  Makefile  交叉编译 手机看文章 扫描二维码
随时随地手机看文章

主Makefile总领全局的就这句——

lcd.bin: $(objs)

要生成lcd.bin,依赖于objs列举的一堆文件:head.o init.o nand.o interrupt.o serial.o lcddrv.o framebuffer.o lcdlib.o main.o lib/libc.a

所以要先找到这些文件,几个.o,还有一个.a

.o目标文件怎么生成?

%.o:%.c和%.o:%.S是生成规则,就是依赖于.c或.S文件,使用交叉编译命令生成。

.a是库文件,到lib子目录里去找,在子目录里用make命令生成

下面逐行解读:


CC = arm-linux-gcc    //编译器。定义CC变量,为了简化书写

LD = arm-linux-ld  //连接器。定义LD变量,为了简化书写
AR = arm-linux-ar  //库管理器。将多个可重定位的目标模块归档为一个函数库文件。这个变量在lib/makefile文件中使用了
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump

INCLUDEDIR := $(shell pwd)/include   //定义头文件目录变量  $(shell pwd)为获取当前工作路径
CFLAGS := -Wall -O2  //GCC的编译参数  -Wall显示所有编译错误或警告  -O2优化选项,编译时使用2级优化
CPPFLAGS := -nostdinc -I$(INCLUDEDIR)   //GCC编译参数  -nostdinc忽略缺省目录  -Idir把dir加到头文件的搜索路径中,而且gcc会在搜索标准头文件之前先搜索dir.  


备注:‘=’与‘:=’的区别:

   “=”:make会将整个makefile展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:

            x = foo
            y = $(x) bar
            x = xyz

      在上例中,y的值将会是 xyz bar ,而不是 foo bar 。

      “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。

            x := foo
            y := $(x) bar
            x := xyz

      在上例中,y的值将会是 foo bar ,而不是 xyz bar 了。


 

export CC LD AR OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS  //这些变量将传递到下级Makefile,本文件中指的是生成lib/libc.a库文件时的Makefile

objs := head.o init.o nand.o interrupt.o serial.o lcddrv.o framebuffer.o lcdlib.o main.o lib/libc.a    //定义变量objs,包含了生成目标文件所需的文件

lcd.bin: $(objs)  //定义生成目标lcd.bin,依赖于objs对象。执行这条命令时,先生成所有依赖文件,然后依次执行下面三条命令
  ${LD} -Tlcd.lds -o lcd_elf $^  //执行shell命令,LD变量前面定义”LD = arm-linux-ld“,即进行连接,使用lcd.lds为连接脚本,输出目标为lcd_elf,$^表示全部依赖文件
  ${OBJCOPY} -O binary -S lcd_elf $@  //执行shell命令,将lcd_elf文件转换成二进制文件,-O表示输出格式,-S表示不从源文件中复制重定位信息和符号信息到目标文件中
  ${OBJDUMP} -D -m arm lcd_elf > lcd.dis  //反汇编lcd_elf文件为lcd.dis文件

.PHONY : lib/libc.a  //.PHONY表示伪目标,不要管lib/libc.a文件是否存在
lib/libc.a:  //当生成依赖文件lib/libc.a文件时,用下面的命令段,即cd lib; make; cd ..
  cd lib; make; cd ..  //进入lib目录,然后执行make命令,最后返回到当前目录。在lib子目录执行make命令时将使用子目录的Makefile,但于由前面export命令,本文件定义的一些变量将传递过去
%.o:%.c  //%通配符。生成xxx.o文件先要找到xxx.c文件
  ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<  //-c编译不连接。$@表示目标文件   $<表示第一个依赖文件

%.o:%.S
  ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:  //这个clean目标没有依赖对象,肯定是生成不了clean文件的,但会执行下面的命令。前面写明.PHONY : clean就更清楚了
  make clean -C lib
  rm -f lcd.bin lcd_elf lcd.dis *.o


关键字:LCD  Makefile  交叉编译 引用地址:LCD实验学习笔记(一):Makefile

上一篇:LCD实验学习笔记(二):head.S
下一篇:linux 2.6.22.6 移植

推荐阅读最新更新时间:2024-10-30 23:08

2019年过半手机或将使用OLED屏
        过去,全球95%的OLED面板市场几全由Samsung Display一家所独占,但今年来,除了LGD加入战局之外,中国厂商也加快脚步积极布局;根据CINNO Research资料显示,截至今年6月底止,中国已建与正在兴建中的OLED生产线高达11条。   根据研究机构IHS预测,2020年Samsung Display的OLED面板市占率将从鼎盛时期的95%快速下滑到52%;京东方以15%跃居第二,LG Display11%居第三,中国大陆天马及华星光电则以5~6%左右之市占分居第4及第5名。   IHS预估,2019年智慧型手机的OLED渗透率将首度超越LCD来到50.7%、市值约207亿美元,20
[手机便携]
交叉编译Python-2.7.13到ARM(aarch64)平台
方法跟交叉编译Python-2.7.13到ARM(aarch32)平台基本一样, 不同的地方只是把工具链换成编译aarch64的工具链,这里可以参考用qemu搭建aarch64学习环境. 创建目录: mkdir python2_7_13_for_aarch64 下面是配置、编译和安装的脚本: 1、配置: mk1_conf.sh 1 #!/bin/bash 2 3 export PATH=/home/pengdonglin/src/qemu/aarch64/gcc-linaro-aarch64-linux-gnu-4.9-2014.07_linux/bin:$PATH 4 5 ../Python-2.7.13
[单片机]
LCD12864 液晶显示器 模块化程序
/********************** lcd12864.h 头文件 **********************/ #ifndef _LCD12864_H_ #define _LCD12864_H_ extern void lcd12864_busy(); //忙标志函数 extern void led12864_clear();//清屏 extern void lcd12864_init(); //初始化函数 extern void lcd12864_pxy(unsigned char p,unsigned char x,unsigned char y);//数据的显示位置,p=0左半屏,p=1右半屏,p
[单片机]
<font color='red'>LCD</font>12864 液晶显示器 模块化程序
LCD1602程序显示字符串
1602lcd连接线图接法: |DB0-----P0.0 | DB4-----P0.4 | RW-------P2.0 | |DB1-----P0.1 | DB5-----P0.5 | RS-------P2.1 | |DB2-----P0.2 | DB6-----P0.6 | E--------P2.2 | |DB3-----P0.3 | DB7-----P0.7 | VLCD接1K电阻到GND | 显示第一行显示welcome!第二行显示Hello world! (1)lcd_busy() 忙状态函数 (2)lcd_command() 发数据到指令寄存器IR函数 (3)lc
[单片机]
LCD2004AVR单片机驱动源程序
/*======================================================= 20x4字符液晶主程序,编译软件(I CC AVR_6.31) CPU内部 晶振 8M 数据线B0~B7接PORTB, E=D7 RW=D6 RS=D5 ========================================================= 接线图如下: _______________ ______________ | --1|GND | | --2|+5V | | --3|V0 |
[单片机]
新型LCD驱动电路IP核的总体设计
  本文介绍了LCD的通用驱动电路IP核设计,采用自顶向下的设计方法将其划分为几个主要模块,分别介绍各个模块的功能,用VHDL语言对其进行描述,用FPGA实现并通过了仿真验证。该IP核具有良好的移植性,可驱动不同规模的LCD电路。    引言   LCD因具有工作电压低、功耗小、显示信息量大、寿命长、易集成、方便携带和电磁辐射污染小等优点,在显示技术中异军突起,被广泛应用于手机、PDA产品、手持式仪器仪表等便携式电子产品与设备中。   LCD驱动电路是液晶显示系统的重要组成部分,是一种计算机(或MCU)和液晶屏之间的接口电路,其主要功能是通过调制输出到液晶显示器件电极上的电位信号的相位、峰值、频率等参数来建立交流驱动电场。由于L
[电源管理]
新型<font color='red'>LCD</font>驱动电路IP核的总体设计
下滑后反弹 大尺寸LCD面板出货与金额创新高
  根据DisplaySearch月度TFT LCD出货报告数据,2010年5月大尺寸TFT LCD面板出货量达五千八百八十万片,较四月增长9%,相应出货金额为七十五亿美金,较四月增长7%,这个数据也超越了今年3月刚创下最高月出货量纪录。不只如此,与去年相比较增长幅度显着提高,出货量增36%,出货金额更是增长60%。   根据DisplaySearch大中华区副总裁谢勤益先生表示:“尽管2010年第二季度TFT LCD产业正在经历着面板价格与库存调整期,但是面板出货的动力并未因此减慢,反而自4月份面板出货量下滑后反弹至更高月出货的水平。”   所有应用种类都较上月有更高的增长,特别是笔记本电脑、上网本与平板电脑用面板增长尤为显
[半导体设计/制造]
下滑后反弹 大尺寸<font color='red'>LCD</font>面板出货与金额创新高
基于ARM的LCD触摸屏系统设计方案
  引言   随着嵌入式系统技术的飞速发展,工业设备产品也越来越现代化,普遍要求可视化操作。LCD触摸屏低耗能.散热小,成本低,纤薄轻巧,外形尺寸小,安装容易。使用LCD触摸屏作为工业设备的输入输出设备既能达到可视化的要求,方便现场操作,又能降低产品的成本。而在产品的整体设计过程中,人机交互界面的设计往往占据着很大一部分工作,这样,不但极大地增加了产品的开发成本瓶且延长了产品的上市周期。本文设计的基于S3C44BOX的人机交互界面是一种可定制、简单易用、性能优良的通用型人机交互界面,能很好地解决上述问题。   1 系统结构   系统主要包括三个部分,分别为PC机、S3C4480X微处理器和LCD触摸屏模块。系统结构框图如图1所示
[单片机]
基于ARM的<font color='red'>LCD</font>触摸屏系统设计方案
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved