tag 标签: makefile

相关博文
  • 热度 2
    2017-9-16 15:08
    1723 次阅读|
    1 个评论
    1. 安装Eclipse及它的C/C++开发环境: # dnf install eclipse # dnf install eclipse-cdt 这个步骤非常简单。新的Fedora系统使用dnf命令,老的Fedora系统使用yum命令。Ubuntu系统使用apt-get,或者直接从Eclipse网站下载源代码,都是可以的。 2. 从U-Boot官方网站下载源代码: http://www.denx.de/wiki/U-Boot/SourceCode 这里当然要用最新稳定版。 3. 解压U-Boot源代码并创建Git仓库: $ tar -xvf u-boot-latest.tar.bz2 $ cd u-boot-2017.01/ $ git init $ git add * 这一步并不是编译必须,但是应该养成习惯。从官方网站下载的源代码,解压后的第一步就是创建本地GIt仓,以便查看开发历史。 4. 使用Eclipse导入U-Boot的Makefile项目 ​ ​ : Files - Import - Existing Code as Makefile Project $ git add .gitignore 选择U-Boot源代码所在的目录,目录名会自动作为工程名字。交叉编译链选择“None”,我们会在Makefile里指定交叉编译器。.gitignore文件是U-Boot工程自带的,我们也把它加入Git仓 5. 在终端里导入config文件: $ make CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf- am335x_boneblack_defconfig $ vim .gitignore !.config $ git add .gitignore .config 由于make *_defconfig步骤不能在Eclipse里进行,所以我们还是在终端里执行它,生成的.config文件加入git仓库。Eclipse会默认忽略.config文件,所以我们得将它从ignore列表排除。虽然加入git仓的步骤不是必须的,但还是推荐执行。 6. 安装ncurses库及其头文件,然后进行make menuconfig: # dnf install ncurses-libs.x86_64 ncurses-devel.x86_64 # dnf install ncurses-libs.i686 ncurses-devel.i686 $ make CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf- menuconfig 如果进行过Linux内核开发,这里的menuconfig界面看起来会非常熟悉。如果需要添加某个驱动,在这里选中并保存。 7. 最后在Makefile里添加CROSS_COMPILE选项,并在Eclipse工程里编译: CROSS_COMPILE=/opt/gcc-linaro-arm-linux-gnueabihf-4.7-2013.03-20130313_linux/bin/arm-linux-gnueabihf- 这时就能看到工程目录下生成的目标文件了。 虽然Vim使用ctags工具,也能进行函数跳转,但是Eclipse更加方便。如果不是处理远程代码,还是推荐使用Eclipse或者其他IDE进行U-Boot开发! EM
  • 热度 39
    2016-3-29 19:39
    2450 次阅读|
    1 个评论
      最简单的 Linux 驱动程序 版权声明: 本文由博主 “cuter” 发布。欢迎转载,但不得擅自更改博文内容,也不得用于任何盈利目的。转载时不得删除作者简介和版权声明。如有盗用而不说明出处引起的版权纠纷,由盗用者自负。 博客官方地址: ChinaAETna : http://blog.chinaaet.com/cuter521 EDN China : http://bbs.ednchina.com/BLOG_cuter521_356737.HTM   1、              前言 虽然说是最简单,但仍然费了些功夫,正所谓知易行难,看着网上和书上寥寥数语就把最简单的 Hello , Linux Driver 讲完,本以为能手到擒来,半小时搞定,做下来却花了半天多。 2、              学习目标 a)         简单了解驱动开发流程 b)         如何编译驱动程序 c)         如何加载和卸载驱动程序 3、              被绊倒的点 a)         重启后,未重新配置系统环境变量,编译驱动时并没有提示找不到编译器 b)         要进入 root 后再编译(不知道为啥,这个可能是因为编译器装在 root 路径下) c)         编译报错时,过于纠结代码所在路径问题 d)         对 Makefile 的规则不了解 4、              驱动程序概述 设备驱动程序,顾名思义,用于驱动设备,实现设备的操作和控制。与中间件类似,位于应用软件和硬件之间,为应用软件屏蔽底层硬件细节,提供了设备管理的接口,应用开发人员不必在硬件细节花太大精力。 5、              一个完整的最简化的“ Hello, Linux Driver ”模块 ------------------------------------ hello.c ------------------------------------- #include #include MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) {      printk("Module init complete!\nHello, Linux Driver!\n");      return 0; } static void hello_exit(void) {      printk("Module exit!\nBye, Linux Driver!\n"); } module_init(hello_init); module_exit(hello_exit);   MODULE_AUTHOR("Cuter@ChinaAET"); MODULE_DESCRIPTION("HelloLinuxDriver"); MODULE_ALIAS("It's only a test");   ------------------------------------------end---------------------------------------- 编程人经典的“ Hello world ”,只要有一定的基础,上述程序一眼就看个明白了。针对 Linux 驱动开发需要特别指出的是: a)         MODULE_LICENSE 宏,用于告知内核,该模块带有一个自由的许可证,如缺少,加载时会报错。 b)         module_init() ,在模块加载到内核时被调用; c)         module_exit() ,在模块从内核中移除时调用; d)         printk() ,内核用打印函数,与 printf() 类似;   6、              程序的编译 编写 Makefile 编译的关键在于 makefile 的编写,最终的 makefile 如下: -------------------------------------------------makefile-------------------------------------------- obj-m := hello.o # current path CURRENT_PATH:=$(shell pwd) # linux kernel path LINUX_KERNEL_PATH:=/home/cucter/Documents/linux-digilent-3.6 # complie object all:        make -C $(LINUX_KERNEL_PATH) ARCH=arm M=`pwd` modules # clean clean:        make -C $(LINUX_KERNEL_PATH) ARCH=arm M=$(CURRENT_PATH) clean   ----------------------------------------------------end----------------------------------------------- 这块碰到的错误: a)         Commands commence before first target. Stop b)         Missing separator stop Makefile 规则:每个执行行要以 Tab 开头, Tab 长度为 4 c)         注意 CURRENT_PATH 是否在上文定义了。网上有用 PWD 的文章( digilent 一份 PDF 也是),但都未定义,会报该错误。 注意 `pwd` ,不是用的单引号,而是 1 左边按键上的那个符号。   7、              测试 在串口终端中利用 tftp 指令,将驱动程序从 PC 下载至系统,使用 insmod 指令加载驱动,结果如下: 使用 lsmod 指令再次确认加载成功: 卸载驱动:由上图可以看出,直接使用 rmmod 卸载是不成功的,原因是 BusyBox 和发行的 Linux ,在加载驱动时,并没有生成相应的目录。我们首先进入 /lib/modules 目录,创建 3.6.0-digilent-13.01 文件夹(由上图错误提示可知),然后运行 rmmod 指令,卸载驱动,结果如下图所示。    
  • 热度 24
    2014-12-31 09:45
    1344 次阅读|
    0 个评论
    在Makefile中我们经常看到 = := ?= +=这几个赋值运算符,那么他们有什么区别呢?我们来做个简单的实验 新建一个Makefile,内容为: ifdef DEFINE_VRE     VRE = “Hello World!” else endif ifeq ($(OPT),define)     VRE ?= “Hello World! First!” endif ifeq ($(OPT),add)     VRE += “Kelly!” endif ifeq ($(OPT),recover)     VRE := “Hello World! Again!” endif all:     @echo $(VRE) 敲入以下make命令: make DEFINE_VRE=true OPT=define 输出:Hello World! make DEFINE_VRE=true OPT=add 输出:Hello World! Kelly! make DEFINE_VRE=true OPT=recover  输出:Hello World! Again! make DEFINE_VRE= OPT=define 输出:Hello World! First! make DEFINE_VRE= OPT=add 输出:Kelly! make DEFINE_VRE= OPT=recover 输出:Hello World! Again! 从上面的结果中我们可以清楚的看到他们的区别了 = 是最基本的赋值 := 是覆盖之前的值 ?= 是如果没有被赋值过就赋予等号后面的值 += 是添加等号后面的值   之前一直纠结makefile中“=”和“:=”的区别到底有什么区别,因为给变量赋值时,两个符号都在使用。网上搜了一下,有人给出了解答,但是本人愚钝,看不懂什么意思。几寻无果之下,也就放下了。今天看一篇博客,无意中发现作者对于这个问题做了很好的解答。解决问题之余不免感叹,有时候给个例子不就清楚了吗?为什么非要说得那么学术呢。^_^       1、“=”       make会将整个m akefile 展开后,再决定变量的值。也就是说,变量的值将会是整个makefile中最后被指定的值。看例子:              x = foo             y = $(x) bar             x = xyz        在上例中,y的值将会是  xyz bar  ,而不是  foo bar  。       2、“:=”       “:=”表示变量的值决定于它在makefile中的位置,而不是整个makefile展开后的最终值。              x := foo             y := $(x) bar             x := xyz       在上例中,y的值将会是  foo bar  ,而不是  xyz bar  了。
  • 热度 24
    2014-2-23 10:00
    2191 次阅读|
    2 个评论
    首先,why MSP430?虽然现在ARM系列MCU正在以不可逆转之势占领市场,TI公司的MSP430系列仍然有稳固的一席之地,很重要的原因是它的超低功耗特性。相比于其他架构单片机,它具备灵活丰富的时钟选项、外设时钟配置和工作模式选择,能够最大限度的降低工作电流,从而使它非常适合对功耗敏感的场合。 一、如何在Linux下搭建开发环境? 准备一块MSP430F2616的开发板,以及JTAG仿真器FET430UIF(如果是其它种类的仿真器,先要确认mspdebug是否支持)。然后,以Linux桌面发行版Fedora为例,使用yum安装msp430-gcc、mspdebug、msp430-libc(如果是Linux的桌面发行版Ubuntu,则使用apt-get)。 二、如何下载并调试程序? 将开发板与仿真器连接好,上电,在终端输入命令: mspdebug -j uif -d /dev/ttyUSB0 -j的意思是使用JTAG而不是Spy-Bi-Wire;-d的意思是仿真器对应的设备号,如果有多个设备,就执行dmesg | grep ttyUSB,看看打印信息就知道了。不出意外的话,mspdebug命令会出现下面这样的提示信息: Type "help " for more information. Use the "opt" command ("help opt") to set options. Press Ctrl+D to quit. (mspdebug) 提示符后面可以输入命令。prog用来烧写程序,reset用来复位,run用来执行,而step用来单步执行等等。如果想要烧写程序,则输入: (mspdebug)prog xxx.elf 三、如果编写简单的main.c文件并编译? 因为安装msp430-libc的时候,在/usr/msp430/include/下生成了头文件,所以最简单的main.c函数只需要: #include // 使用尖括号,include对应MCU的头文件 int main (void) {     WDTCTL = WDTPW + WDTHOLD;     P1DIR = 0xFF;     while (1) {         P1OUT = 0x00;         P1OUT = 0xFF;     }     return 0; } 编译使用msp430-gcc命令: msp430-gcc -mmcu=msp430f2616 -o main.elf main.c (要注意的是,因为msp430系列的单片机watch dog是默认打开的,所以需要先将它关闭,然后再操作IO口。) 四、如何编写Makefile文件? 如果源文件不止main.c,而是包括很多其他的.c文件,就需要编写Makefile文件告诉编译器该怎么做了。Makefile的基本格式是:描述一个.o文件由哪几个.c和.h文件组成(与.o文件同名的.c文件可省略不写),然后执行xxx-gcc的编译命令。 .PHONY表示,clean是个伪目标文件,执行make时不会执行它,而执行make clean时才会执行。编译命令必须以tab键开始,否则不能识别。 OBJECTS = main.o led.o timedelay.o uart.o CC = msp430-gcc MCU = msp430f2616 FLAGS = -mmcu=$(MCU) -Wall main.elf: $(OBJECTS)     $(CC) $(FLAGS) -o main.elf $(OBJECTS) main.o: timedelay.h led.h uart.h     $(CC) $(FLAGS) -c main.c timedelay.o: timedelay.h     $(CC) $(FLAGS) -c timedelay.c led.o: led.h timedelay.h     $(CC) $(FLAGS) -c led.c uart.o: uart.h timedelay.h     $(CC) $(FLAGS) -c uart.c .PHONY: clean clean:     rm -f main.elf $(OBJECTS) 这样,MSP430F2616的开发环境就在Linux下搭好了,要继续后续的开发,就要开始学习MSP430F2616的特性和寄存器操作了。值得注意的是,MSP430F2616区别于其他单片机的地方,是它的时钟源和工作模式,这也是它低功耗的主要原因之一,所以最好能把它的时钟管理部分好好的看一看,设置并观察一下不同时钟源的寄存器,感受一下运行速度,然后再学习UART、TIMER等等外设。
相关资源
  • 所需E币: 0
    时间: 2023-11-10 15:45
    大小: 1006KB
    上传者: Argent
    第5讲Uboot顶层Makefile分析
  • 所需E币: 0
    时间: 2023-11-10 15:46
    大小: 1021KB
    上传者: Argent
    第11讲Linux内核顶层Makefile分析
  • 所需E币: 0
    时间: 2023-11-10 16:42
    大小: 1018.5KB
    上传者: Argent
    第16讲make工具和Makefile的引入
  • 所需E币: 1
    时间: 2023-11-10 16:42
    大小: 1.02MB
    上传者: Argent
    第17讲Makefile基本语法
  • 所需E币: 1
    时间: 2023-5-15 18:56
    大小: 227.11KB
    上传者: 舒凤志
    介绍Linux内核的Makefile
  • 所需E币: 1
    时间: 2021-9-15 18:27
    大小: 464.27KB
    上传者: Argent
    FPGA是一个技术密集型的行业,没有坚实的技术功底,很难形成有竞争力的产品。从技术上来看FPGA未来的发展有广阔的空间,嵌入式开发需要了解不同领域的产品工作原理,包括快速读懂数据手册,搜集了部分数据手册,第三方教育机构的指导性文档,希望对您有所帮助。
  • 所需E币: 1
    时间: 2020-12-10 23:02
    大小: 509.8KB
    上传者: sense1999
    浅谈内核的Makefile、Kconfig和.config文件
  • 所需E币: 0
    时间: 2020-6-17 16:35
    大小: 150.54KB
    上传者: zendy_731593397
    如何编写Makefile
  • 所需E币: 3
    时间: 2019-12-25 16:47
    大小: 530.7KB
    上传者: givh79_163.com
    Makefile中文教程……
  • 所需E币: 4
    时间: 2019-12-25 01:53
    大小: 384.3KB
    上传者: wsu_w_hotmail.com
    LinuxMakefile找到了份挺好的中文Makefile的教程,非常详细清楚.大家共享.-ITPUB论坛首页设置注册登陆培训WikiBlog桌面搜索FlashSCMSAP丛书书签资料库退出ITPUB论坛>≡操作系统与硬件≡>其它UNIX系统>找到了份挺好的中文Makefile的教程,非常详细清楚.大家共享.转到首个未读的帖子接收该主题更新信息加此话题到个人收藏加入资料库上一主题……
  • 所需E币: 3
    时间: 2019-12-25 01:52
    大小: 603.46KB
    上传者: quw431979_163.com
    Makefile中文手册GNUMake使用手册(中译版)翻译:于凤昌译者注:本人在阅读Linux源代码过程中发现如果要全面了解Linux的结构、理解Linux的编程总体设计及思想必须首先全部读通Linux源代码中各级的Makefile文件。目前,在网上虽然有一些著作,但都不能全面的解释Linux源代码中各级的Makefile文件,因此本人认真阅读了GNUMake使用手册(3.79)版原文,在此基础上翻译了该手册,以满足对Linux源代码有兴趣或者希望采用GCC编写程序但对缺乏GNUMake全面了解之人士的需要。本人是业余爱好不是专业翻译人士,如果有问题请通过电子信箱与我联系共同商讨,本人的E-mail为:yfc70@public2.lyptt.ha.cn。注意在文章中出现的斜体加粗字表示章节。GNUmakeVersion3.79April2000RichardM.StallmanandRolandMcGrath目录1make概述1.1怎样阅读本手册1.2问题和BUG2Makefile文件介绍2.1规则的格式2.2一个简单的Makefile文件2.3make处理Makefile文件的过程2.4使用变量简化Makefile文件2.5让make推断命令2.6另一种风格的Makefile文件2.7在目录中删除文件的规则33编写Makefile文件3.1M……
  • 所需E币: 4
    时间: 2020-1-16 14:24
    大小: 304.83KB
    上传者: 16245458_qq.com
    make和makefile详解电子产品世界-uClinux&OpenHardware-Linux/Unix环境下的make和makefile详解(...页码,1/9收藏本页联系我们论坛帮助maozf重登录隐身用户控制面板搜索风格论坛状态论坛展区退出>>自己动手打造uClinux开发板,FreeandOpenSource......电子产品世界→技术专题→uClinux&OpenHardware→Linux/Unix环境下的make和makefile详解(...您是本帖的第612个阅读者我的收件箱(0)*贴子主题:Linux/Unix环境下的make和makefile详解(...leafboy楼主等级:助理工程师文章:36积分:108注册:2003-6-5鲜花(0)鸡蛋(0)Linux/Unix环境下的make和makefile详解(转贴)学习uclinux,我觉得要先学习make和makefile,我从网上找来几篇文章,与大家共享Linux/Unix环境下的make和makefile详解Pathetique无论是在Linux还是在Unix环境中,make都是一个非常重要的编译命令。不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或makeinstall。利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系。而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员来说简直就是一场灾难。而make工具则可自动完成编译工作,并且可以只对程序员在上次编译后修改……
  • 所需E币: 5
    时间: 2020-1-6 14:50
    大小: 1.16MB
    上传者: rdg1993
    PCB布线,gcc-as以及布线方面的学习文档……