qiuri2008

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  1127 随笔 :: 0 文章 :: 84 评论 :: 321万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

2020年2月9日

make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

这时什么意思呢?

ARCH

即architecture,就是选择编译哪一种cpu architecture,也就是编译arch/目录下的哪一个子目录。如指定make ARCH=arm就是编译arch/arm下的代码。如果不指定,make将使用本机(用什么机器编译就是什么)的cpu作为缺省ARCH.注意:arch/arm下不但有arm体系架构特有的代码,还有arm特有的kconfig,也就是配置选项,所以在make menuconfig,make xxxx_defconfig的时候也必须指定ARCH=arm。

CROSS_COMPILE

即交叉编译器的前缀(prefix),也就是选择将代码编译成目标cpu的指令的工具,如指定make CROSS_COMPILE=arm-none-linux-gnueabi-就是使用arm-none-linux-gnueabi-gcc, arm-none-linux-gnueabi-ld等工具将代码编译成arm的可执行指令。如果不指定CROSS_COMPILE参数,make时将认为prefix为空,即使用gcc来编译。这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

 

在配置或编译内核之前,首先要确定目标CPU架构,以及编译时采用什么工具链。这是最最基础的信息,首先要确定的。

如果你是为当前使用的PC机编译内核,则无须设置。

否则的话,就要明确设置。

这里以arm为例,来说明。

有两种设置方法():

a) 修改Makefile

打开内核源码根目录下的Makefile,修改如下两个Makefile变量并保存。

ARCH           := arm
CROSS_COMPILE  := arm-linux-

注意,这里cross_compile的设置,是假定所用的交叉工具链的gcc程序名称为arm-linux-gcc。如果实际使用的gcc名称是some-thing-else-gcc,则这里照葫芦画瓢填some-thing-else-即可。总之,要省去名称中最后的gcc那3个字母。

b) 每次执行make命令时,都通过命令行参数传入这些信息。

这其实是通过make工具的命令行参数指定变量的值。

例如

配置内核时时,使用

make  ARCH=arm  CROSS_COMPILE=arm-linux-  menuconfig

编译内核时使用

make  ARCH=arm  CROSS_COMPILE=arm-linux- 

 

注意,实际上,对于编译PC机内核的情况,虽然用户没有明确设置,但并不是这两项没有配置。因为如果用户没有设置这两项,内核源码顶层Makefile(位于源码根目录下)会通过如下方式生成这两个变量的值。

SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
 -e s/arm.*/arm/ -e s/sa110/arm/ \
 -e s/s390x/s390/ -e s/parisc64/parisc/ \
 -e s/ppc.*/powerpc/ -e s/mips.*/mips/ \
 -e s/sh[234].*/sh/ )

ARCH?= $(SUBARCH)
CROSS_COMPILE ?=

经过上面的代码,ARCH变成了PC编译机的arch,即SUBARCH。因此,如果PC机上uname -m输出的是ix86,则ARCH的值就成了i386。

而CROSS_COMPILE的值,如果没配置,则为空字符串。这样一来所使用的工具链程序的名称,就不再有类似arm-linux-这样的前缀,就相当于使用了PC机上的gcc。

最后再多说两句,ARCH的值还需要再进一步做泛化。因为内核源码的arch目录下,不存在i386这个目录,也没有sparc64这样的目录。

因此顶层makefile中又构造了一个SRCARCH变量,通过如下代码,生成他的值。这样一来,SRCARCH变量,才最终匹配到内核源码arch目录中的某一个架构名。

 

SRCARCH := $(ARCH)  


ifeq ($(ARCH),i386)
        SRCARCH := x86
endif


ifeq ($(ARCH),x86_64)
        SRCARCH := x86
endif

ifeq ($(ARCH),sparc64)
       SRCARCH := sparc
endif

ifeq ($(ARCH),sh64)
       SRCARCH := sh
endif

posted @ 2020-02-09 20:07 江召伟 阅读(19015) 评论(0) 推荐(1) 编辑

2019年11月15日

摘要: 7z apt-get install p7zip-full 合并: cat xxx* xxx.7z 7z x xxx.7x .tar 文件 # 仅打包,并非压缩tar -xvf FileName.tar # 解包tar -cvf FileName.tar DirName # 将DirName和其下所 阅读全文
posted @ 2019-11-15 15:59 江召伟 阅读(588) 评论(0) 推荐(0) 编辑

2019年11月12日

摘要: 首先引用一句 wiki 上的定义来开篇: Mounting takes place before a computer can use any kind of storage device (such as a hard drive, CD-ROM, or network share). The u 阅读全文
posted @ 2019-11-12 16:43 江召伟 阅读(7704) 评论(1) 推荐(7) 编辑

2019年11月10日

摘要: 1. SELINUX是可以理解为一种android上面的安全机制,是有美国国家安全局和一些公司设计的一个针对linux的安全加强系统我们可以通过配置SELINUX的相关policy,来定制自己的手机的一些权限,比如,我们可以完全让root用户没有任何的权限和user一样2. 在android里面,有 阅读全文
posted @ 2019-11-10 17:21 江召伟 阅读(3778) 评论(0) 推荐(1) 编辑

2019年11月7日

摘要: 优先 替换 Supernova\projects\customerinfo\inc\Customer_Info.h替换 内核中linux/drivers/mmc/core/mmc.c文件 1, keypad1.如How to customize Keypad.docx说明改android\ics\d 阅读全文
posted @ 2019-11-07 16:14 江召伟 阅读(2197) 评论(0) 推荐(0) 编辑

摘要: 当进程崩溃出现coredump提示时,可以利用gdb来定位出错函数。 首先,把core_dump.XXX.gz文件从设备上拷贝出来,放到编译环境下,另外,还要把代码目录下的symbols文件夹也拷贝到编译环境下,因为程序用到很多库,很多时候出错是在库函数里,所以一定要拷贝当前编译时产生的symbol 阅读全文
posted @ 2019-11-07 15:31 江召伟 阅读(637) 评论(0) 推荐(0) 编辑

摘要: 串口唤醒功能主要是从supernova 待机进入PM后,串口接收PC端口发送过来的特定字串,然后将主板唤醒的功能。与IR,KEYPAD,WOL,CEC,MHL 等等基本流程一致,触发源不一样而已。 待机前设置待机参数 bPmWakeEnableUART1 设置为FALSE,开启该口的唤醒功能,然后E 阅读全文
posted @ 2019-11-07 15:30 江召伟 阅读(1346) 评论(0) 推荐(0) 编辑

摘要: 芯片的pin 脚可以用作不同的功能,总结一句就是外设进行状态和数据交换。 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置;// 如LED,屏的电源,背光的开关,功放的静音等等。 除了控制设置之外,还需要和外部设置传输数据。pin 作为GPIO 设置为IN时,是获取外设的高低 阅读全文
posted @ 2019-11-07 14:40 江召伟 阅读(1151) 评论(0) 推荐(0) 编辑

摘要: SEAndroid安全机制所要保护的对象是系统中的资源,这些资源分布在各个子系统中,例如我们经常接触的文件就是分布文件子系统中的。 实际上,系统中需要保护的资源非常多,除了前面说的文件之外,还有进程、socket和IPC等等。 在用户空间中,SEAndroid包含有三个主要的模块,分别是安全上下文( 阅读全文
posted @ 2019-11-07 14:38 江召伟 阅读(543) 评论(0) 推荐(0) 编辑

摘要: 一个典型的嵌入式系统是由uboot+kernel+rootfs组成的,其中uboot和kernel都是二进制,rootfs存在文件系统。 二进制在烧录的时候比较简单,将二进制数据写入存储设备固定地址;rootfs存在文件系统,所以需要对存储设备进行分区,然后在分区上建立文件系统。 对存储介质分区可以 阅读全文
posted @ 2019-11-07 14:23 江召伟 阅读(2884) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示