搜索

tag 标签: 操作系统

相关帖子

版块 作者 回复/查看 最后发表
【RT-Thread读书笔记】汇总 嵌入式系统编程 okhxyyo 2019-4-23 0 1010 okhxyyo 2019-4-23 23:16
8051嵌入式操作系统 attachment 【51单片机】 engineer_wubin 2017-9-2 12 1766 damiaa 2017-9-6 19:30
转Am335x StarterKit 淘e淘 nktxsj 2017-5-21 13 2036 suoma 2017-5-31 22:44
51单片机12864时钟+菜单+多功能应用操作系统 attach_img 【51单片机】 13118302007 2017-5-20 6 1111 西点钟灵毓秀 18 小时前
嘉仪SMT点料机X-Chip-A380参数 attach_img 信息发布 jyzidkj 2017-3-20 0 505 jyzidkj 2017-3-20 15:12
跟着tidyjiang8一起玩Zephyr 【其他嵌入式操作系统】 okhxyyo 2017-1-22 0 2323 okhxyyo 2017-1-22 08:58
投票 物联网操作系统,你选哪个? RF/无线 soso 2017-1-13 20 3426 fwg100020 2017-1-15 17:01
【威雅利电子】乐视、小米争相开发智能自行车,到底有多牛? attach_img 信息发布 威雅利电子 2016-12-26 0 2525 威雅利电子 2016-12-26 14:40
在RTX中释放PB3为GPIO使用的一些疑问 attach_img 【其他嵌入式操作系统】 Tobey 2016-12-9 17 4341 huaiqiao 2016-12-16 18:26
心仪M7--STM32F769I-DISCO评测--预备(0) attach_img 【stm32/stm8】 okwh 2016-12-8 6 1584 okwh 2016-12-20 20:53
CC3200有没有不使用操作系统的例程? 【无线连接】 dontium 2016-11-19 3 2901 dontium 2016-11-22 16:14
一起玩树莓派3+Android初体验 attach_img 嵌入式系统编程 shenlan1986 2016-11-18 3 49148 xiehuajieaa 2019-8-15 20:28
一起玩树莓派3+Ubuntu Mate初体验 attach_img 嵌入式系统编程 shenlan1986 2016-11-15 2 54355 啊啊啊啊饿 2016-11-15 21:35
基于ARM-M4的开发是否可以使用操作系统 【意法半导体SensorTile专区】 fyaocn 2017-2-9 2 1627 spacexplorer 2017-2-10 11:52
投票 你正在使用哪种RTOS操作系统,说说它们的优缺点? 嵌入式系统编程 eric_wang 2017-2-21 6 1352 senjienly 2017-4-21 13:45
想要学习UC/OS II操作系统的网友看过来,这里有你需要的好资料! 【uCOS/uCGUI】 okhxyyo 2017-2-22 16 3638 洗澡哥 2017-9-14 16:23
分享如何方便集中管理企业中网络设备的配置文件工具 attach_img 信息发布 leeconstance 2017-4-18 0 9495 leeconstance 2017-4-18 16:19
电牵引/电推进系统的高速HIL测试平台 attach_img 信息发布 hirainlily 2017-6-7 0 707 hirainlily 2017-6-7 10:46
8051操作系统:Starlight V0.2 attachment 【51单片机】 engineer_wubin 2018-3-15 0 0 engineer_wubin 2018-3-15 09:34

相关日志

分享 Linux学习日志(17)- 关于Makefile
懒猫爱飞 2017-3-30 17:56
Linux学习日志(17)- 关于Makefile
Makefile 是啥东东,如果在 windows 下开发单片机或其它程序用 IDE 用习惯了,可能对这个 makefile 是一头雾水。 Makefile 是一个文件,它定义了定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,在 windows 下 IDE 开发, IDE 中已隐藏了包含了 makefile 文件,但在 linux 下,我的地盘我做主,编写 makefile 是 linux 世界编程不可回避的话题。 Make 是 20 世纪 70 年代发明的编程项目编译的辅助工具, make 的编译思路很简单,如果源程序发生了改变,并需要重新构建程序或才其它输出文件时, make 会先查看时间截哪些改变了,并按照要求重新构建这些文件,而不会浪费时间重新构建其它文件。 GNU make 是 make 工具的 GNU 版本(关于 GNU 是什么,我觉得学习 linux 人都应该知道 ^_^ ),它已成为工业标准,它属于自由软件,目前非常流行。 小知识 ? GNU 计划,又称革奴计划,是由 Richard Stallman 在 1983 年 9 月 27 日公开发起的。它的目标是创建一套完全自由的操作系统。 Richard Stallman 最早是在 net.unix-wizards 新闻组上公布该消息,并附带《 GNU 宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证 GNU 软件可以自由地“使用、复制、修改和发布”,所有 GNU 软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款, GNU 通用公共许可证( GNU General Public License , GPL )。即“反版权”(或称 Copyleft )概念。 -- 来源 . 百度百科 在终端输入 make 命令就会调用 make 工具, make 会在当前目录按照文件名顺序寻找 makefile 文件,依次按照: GNUmakefile,makefile,Makefile 查找,如果找到其中的任何一个,就读取并按照其中的规则执行,否则报错。 小提示 ! 在网上流传一份《跟我一起写 Makefile 》,作者是:陈皓,很适合新新学习,下面这个网址也可以看看: http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile:MakeFile%E4%BB%8B%E7%BB%8D 打铁还要自身硬,想深入学习 linux 还是要学好基本功,好吧,现在跟着一个小程序,总结一下 makefile 。 1 .目标 写一个 hello.c, 使程序输出 hello,Ubuntu!, 创建 Makefile 文件,输入以下内容并保存。 all: gcc hello.c 注意 gcc hello.c 前面是 tab 键空出的缩进,不能用空格键代替。 然后执行命令: make ,生成以下文件: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 9 -rwxrwxrwx 1 root root 7344 3 月 30 12:47 a.out -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 18 3 月 30 12:47 Makefile 执行命令: ./a.out, 输出以下内容: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ./a.out Hello ubuntu! Makefile 的基本语法格式是: target : prerequisites command ? target 是编译目标,在编译的时候输入 make target 就可以执行 target 规则。 Target 既可以是上档文件,也可以是可执行文件,还可以是一个标签,如前面写的 Makefile 中的 all 。 ? prerequisites 是依赖关系文件,即生成 target 所需要的文件或目标。 ? command 是生成 target 所需要的命令 makefile 会根据时间戳来决定哪些文件需要重新编译,对于为个规则来说明一下,如果 prerequisites 中如果有一个以上的文件比 target 文件更新的话,则 command 所定义的命令就会被执行。 再回头看一下 hello.c 的 Makefile 文件内容: all: gcc hello.c 整个 Makefile 只定义了一个目标 all, 也没有任何依赖关系, all 目标对应的命令为 gcc hello.c, 这个目标 all 是一个标签,也是第一个目标,将第一个目标设置为 all 是一个习惯,当然可以改为任何一个标签。终端输入 make ,不指定任何编译目标,默认执行第一个标签的规则,也就是说输入 make 和 make all 实际上是赞同的。 2 .伪目标 假如一个目标名与当前目录下的某一个文件名相同,那么 make 的时候会出现什么情况?好吧,实践出真知,操作一下应知道了 ^_^ mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ cp a.out all mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 16 -rwxrwxrwx 1 root root 7344 3 月 30 13:09 all -rwxrwxrwx 1 root root 7344 3 月 30 12:47 a.out -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 18 3 月 30 12:47 Makefile mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ make make: 'all' is up to date. mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ 把刚才生成的 a.out, 复制一份,命名为 all, 然后再 make 。可以看到提示信息是“ all ”是最新的,根据 make 处理流程,“是最新的”意味着 all 目标对应的规则永远不会被执行,哪怕实际需要编译的文件已经修改过,也不会被重新编译。 如果程序在编写时 Makefile 的时候,一不小心出现这种问题,那么对程序的编译是致命的,针对这种情况, Makefile 有一个解决办法,引入了一个新的目标 — 伪目标。伪目标是一个标签,这个目标只执行命令,不创建目标,避免目标与工作目录下的实际文件名冲突。 伪目标的写法如下所示: .PHONY: 标签 对于前面这个例子,将 Makefile 文件稍微修改一下,在末尾增加一行: .PHONY:all 代码如下所示: all: gcc hello.c .PHONY:all 将 all 设置为伪目标后,尽管当前目录下有同名为 all 文件,但在终端输入 make 命令, all 的命令会被正确执行。 在实际应用中,通常会有一个 clean 目标,这个目标几乎都会被设置为伪目标,用于清除编译产生的中间文件和可执行文件。在进行源文码打包或才发布的时候,先通过 make clean 命令清除,可以得到干净的代码文件。 继续在 hello.c 的 Makefile 文件中增加一个伪目标 clean, 如下所示: .PHONY:clean -rm –v a.out( 注意前面用是的 tab 做的缩进 ) clean 对应的命令是 -rm –v a.out, 就是一个普通的删除命令,加 -v 参数是显示删除列表。完整的 Makefile 如下所示: .PHONY:all clean all: gcc hello.c clean: -rm -v a.out 如果一个 Makefile 文件有多个伪目标,则可以分多行单独声明,也可以将多个目标一并声明,各伪目标之间用空格隔开。 clean 伪目标的命令为 -rm ,如果在 rm 命令前加“ - ”,含义是如果这条命令执行失败, make 将忽略这个错误,继续往下执行;如果不加“ - ”,则 make 停止。一个工程连续两次 make clean 后,那么第二次 clean 的时候,由于相关文件已经不存在,在加了“ - ”的情况下, clean 会提示出错,但被忽略,而不加“ - ”则不忽略。“ - ”的含义不仅仅对 rm 命令有效,对 Makefile 中的所有命令都有效,安等于 make –i 命令。 3 .自定义变量 make 支持在 Makefile 文件中定义变量,合理使用变量,能增加 Makefile 文件的通用性,并简化 Makefile 文件编写。一般的 Makefile 文件编写中,通常会为源文件、可执行文件以及编译参数等分别定义一个变量,并予以赋值,在编译规则中直接引用这些变量。 变量的定义和赋值方法通常如下所示: VAR = value 在用到变量的地方,通过符号“ $ ”和“()”一起来完成变量引用,如 $(VAR) 。 对于 hello.c 的 Makefile 文件,如果定义源文件 SRC 和可执行文件 EXE 两个变量,对 Makefile 文件进行如下修改: # makefile for hello.c EXE = hello SRC = hello.c .PHONY:clean all all: gcc -o $(EXE) $(SRC) clean: -rm -v $(EXE) 使用了自定义变量后,只需要将 EXE 和 SRC 两个变量进行修改,即可将这个 Makefile 文件用于其它文件编译,增强了通用性与可移植性。 如果变量的赋值有多个值,可直接在等号 (=) 后面列出,如下所示: SRC = hello.c test.c tmp.c 赋值除了直接用 = 号外,可以使用追加符号“ += ”进行追加,例如: SRC = hello.c SRC += test.c tmp.c SRC += hello2.c 如果赋值很长可以用换行符号“ \ ”进行换行处理,例如: SRC = hello.c \ Test.c \ Temp.c 可以在 Makefile 中加注释,对文件或者其中一些变量、规则进行说明,有助于文件的阅读与理解,注释行以“ # ”号开始并顶格。 4 . Makefile 变量 Make 本身有一些特殊变量可以在 Makefile 中使用,能进一步简化 makefile 文件的编写。这些特殊变量包括环境变量、自动变量和预定义变量。 环境变量 就是系统的环境。 Makefile 中基本可以直接引用几乎所有的环境变量,比如代表当前登录用户的 USER ,系统外部命令搜索路径 PATH 等,这些变量可以直接以 $(VAR) 的方式引用。 但是 make 对环境变量的处理有一个例外,就是 shell,make 在默认情况下会指定 Shell 为“ /bin/sh ”,而不是使用用户指定的其它用于交互的 shell 。 另外还有一个可以直接引用但需要小心使用的环境变量 -PWD , PWD 的值是 make 开始运行时的路径。但是,它可能与 make 当前正在解释执行的 Makefile 文件所在的路径不一致,不能认为它一定就是 Makefile 所在的路径。 如果在 Makefile 中定义了一个与系统环境变量同名的自定义变量,则自定义会覆盖系统变量的值,这点一定要注意。 自动变量 不用定义,且会随着上下文的不同而发生改变。 Make 的自动变量都是一些比较难记信的符号,都以“ $ ”符号开头。使用了自动变量的 Makefile 文件读起来会显得抽象生涩一些。常用的 make 自动变量如下所示: ? $@ 规则的目标文件名 ? $ 规则的目标的第一个依赖文件名 ? $^ 规则的目标所对应的所有依赖文件的列表,以空格分隔 ? $? 规则的目标对应的依赖文件新于目标文件的文件列表,发空隔分开 ? $(@D) 规则的目标文件的目录部分(如果目标在子目录中) ? $(@F) 规则的目标文件的文件各部分 ( 如果目标在子目录中 ) 在前面例子的基础上增加一个源文件 hello1.c, 更改一下 Makefile 文件,添加一下自动变量, Makefile 文件修改如下所示: 1 # makefile for hello.c 2 EXE = main 3 OBJ = hello.o hello1.o 4 SRC = hello.c hello1.c 5 6 EXE:$(OBJ) 7 gcc -o $(EXE) $^ 8 9 .PHONY:clean 10 11 clean: 12 -rm -v $(EXE) 修改后的 Makefile 增加了以下几点内容: F 增加了目标和依赖关系 F 编译多个 C 文件,多个文件用空格隔开 F 使用了自动变量 第 6 行 EXE:$(OBJ) ,是说可执行文件依赖于目标文件,目标文件有更新,因此才会重新编译生成可执行文件。编译命令也用了自动变量 $^, 在这里对应所有生成的目标文件。可执行文件名不一定要和源文件相同或者有关系,可以任意取,在这个例子中将可执行文件名设置为 main 。这个 Makefile 的 make 结果如下所示: mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ make gcc -o main hello.o hello1.o mark@ubuntu:/mnt/hgfs/0_VMwareShare/c_learn/lesson001$ ls -l 总用量 20 -rwxrwxrwx 1 root root 7344 3 月 30 14:08 hello -rwxrwxrwx 1 root root 90 3 月 30 14:43 hello1.c -rwxrwxrwx 1 root root 1052 3 月 30 14:43 hello1.o -rwxrwxrwx 1 root root 82 3 月 30 12:46 hello.c -rwxrwxrwx 1 root root 1072 3 月 30 14:43 hello.o -rwxrwxrwx 1 root root 7396 3 月 30 15:33 main -rwxrwxrwx 1 root root 147 3 月 30 15:33 Makefile 自动变量 用于定义程序名称及传递给这些程序的参数和标志位等。常见的预定义变量和描述如下所示: ? AR 归档维护程序,默认值为 ar ? AS 汇编程序,默认值为 as ? CC C 语言编译程序,默认值为 cc ? CPP C 语言预处理程序,默认为 cpp ? RM 文件删除程序,默认值为 rm –f ? ARFLAGS 传递给 AR 程序的标志,默认值为 rv ? ASFLAGS 传递给 AS 程序的标志,默认值无 ? CFLAGS 传递给 CC 程序的标志,默认值无 ? CPPFLAGS 传递给 CPP 程序的标志,默认值无 ? LDFLAGS 传递给链接程序的标志,默认值无 利用自动变量,再次修改 Makefile 文件,如下所示: # makefile for hello.c EXE = main OBJ = hello.o hello1.o SRC = hello.c hello1.c CC = gcc CFLAGS = -o LDFLAGS = -L . -lFOO EXE:$(OBJ) # gcc -o $(EXE) $^ $(CC) $(CFLAGS) $(EXE) $^ .PHONY:clean clean: # -rm -v $(EXE) -$(RM) $(OBJ) $(EXE) 再次编译一下,结果如下所示: 由结果可以看出,能过预定义变量传递的参数全部生效了 ^_^ 5 .隐式规则和显式规则 前面修改的 Makefile 文件中 EXE:$(OBJ) , EXE 依赖于 OBJ ,但是整个 Makefile 只定义了 EXE 的生成规则,并没有给出 OBJ 的生成规则,但为什么编译却没有出错呢? 这是因为 make 有一些既定的目标生成规则,称之为隐式规则,例如对于一个 file.o 的文件, make 会优先寻找同名的 file.c 文件,并按照 gcc –c file.c –o file.o 的编译规则生成 file.o 文件。对于不同的编程语言,有不同的隐式规则,所以一般来说,不推荐用隐式规则。 显式规则是用户自定义的规则,在使用隐式规则有隐患的情况下,更应该使用显式规则,明确指定生成规则,例如前面提到的隐式规则,用显式规则来定义如下所示: OBJ:$(SRC) $(CC) –o $(OBJ) –c $^ 如果不用自定义变量,还可以这么写,为称为模式规则: %.o:%.c $(CC) –o $(OBJ) –c $@ 到现在为止,已经得到一个基本比较完整的 Makefile 文件。只要修改文件的头三个变量,就能用于其它工程编译,这也可以说是一个基本 Linux 应用程序 Makefile 文件的框架。 6 . make 命令 一个工程编写了 Makefile 文件后,通常只需要在当前目录下输入 make 命令即可完成编译。然而实际上 make 命令本身可以接受参数的,完整的用法如下所示: make 选项可以指定 make 的工作行为,宏定义可以指定执行 Makefile 的宏值,目标则是 Makefile 中的目标,包含伪目标,这些参数是可选的,各参数之间用空格隔开。 Make 常见参数如下所示: 选项 说明 -C dir 指定 make 开始运行之后的工作目录为 dir ,默认为当前目录 -d 打印除一般处理信息之外的调试信息,例如进行比较的文件的时间,尝试的规则等。 -e 不允许在 makefile 中对环境变量赋新值,即丢弃与环境变量同名的自定义变量 -f file 使用指定文件 file 为 makefile 文件 -i 忽略 makefile 运行时命令产生的错误,不退出 make -I dir 指定 makefile 运行时的包含目录,多个包含目录用空格分隔 -S 执行 makefile 时遇到错误即退出,这是 make 的默认工作方式,无需指定 -v 打印 make 版本号 Makefile 编写上是一个复杂的工作, Makefile 还有很多复杂和灵活的语法,这里不多总结了,以后用到了再记录吧。如果有空想深入了解,可以参看 GNU 的 makefile Manual^_^ 最后,再吼一下俺的口号: 每天进步一点点,开心多一点 ^_^ --2017年3月30日 17:56:27
个人分类: linux学习日志|1029 次阅读|0 个评论
分享 安装操作系统总结1
unrulife 2014-3-14 20:24
原来系统安装在C盘的ghostXP, 后来安装到F盘的win7安装版, 再后来,在winPE下将F盘格式化, 然后在pe下给f盘装winXP的安装版 前两次死活没有启动安装, 后来在 Win$Man上做如下设置就好了, (对了原来的xp和win7的双系统是有两层启动的, 第一层是win7+早期windows 第二层是winXP和一键还原) 启动也只有一层了 winxp+winxp+一键还原 具体设置: 安装xp到F 引导为C(原来ghost的启动盘) 保留原盘符号 系统盘为C/F(这个根据习惯选择,如果想要每次启动,相应的系统盘标为c就选择c,否则选f) 重启选择win setup即可 开始的时候引导用的F所以一直找不到启动点
个人分类: 电脑技巧|487 次阅读|0 个评论

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2019-9-19 19:14 , Processed in 0.038705 second(s), 8 queries , Gzip On, MemCache On.

Powered by EEWORLD电子工程世界

© 2019 http://bbs.eeworld.com.cn/

返回顶部