软件开发
2017-05-05
2017-04-13
编译过程
用默认配置编译.
2017-04-11
MAKEFILE
内核配置完成后,在顶层目录中执行“#make uImage”便开始编译内核。但是,uImage却不是在顶层Makefile中定义,而是在arch/$(ARCH)/Makefile中定义。
顶层Makefile Line 452:
include $(srctree)/arch/$(SRCARCH)/Makefile
其中srctree为源码绝对路径,
即该变量等于架构名称,我们以arm为例进行说明。
arch/arm/Makefile Line 230:
zImage Image xipImage bootpImage uImage: vmlinux
可见uImage依赖于vmlinux,要先生成vmlinux,然后执行下边这条指令完成编译。
arch/arm/Makefile Line 231:
$(Q)$(MAKE) $(build)=$(boot) MACHINE=$(MACHINE) $(boot)/$@
Q的定义:选择静态编译与否(是否打印编译信息)
MAKE: 系统环境变量,值为make
build: 值为“-f scripts/Makefile.build obj=”实际上就是调用子Makefile–scripts/Makefile.build,然后传递参数目标文件夹。
Kbuild.include被顶层Makefile所包含
源代码定位
配置
/arch/arm/Kconfig 定义了自编译内核配置文件
/arch/arm/configs 和上面的一起.定义不同的CHIP的配置(其实就是定义上面哪些配置要打开. 所以重点还是在Kconfig)
在Kconfig的1080行开始,定义了 source “arch/arm/mach-at91/Kconfig” 也就是不同的芯片会调用各自目录下的Kconfig
通过配置找代码
在MAKEFILE里找到对应配置的代码
plat-$(CONFIG_PLAT_SUNXI) := sunxi
对应的就是plat-sunxi
有的时候对应的源代码很难找. 只能用GREP来了.
比如CONFIG_CSI_OV7670 ,处理它的MAKEFILE在 drivers\media\video\sun4icsi\device\MAKEFILE
2017-04-11
本文不是叫大家怎么做FreeBSD内核,做内核太简单了,不管是Linux和Unix。
在网上找了好久,一点可用的文章都没有找到,FreeBSD的官网的文章也没有给出说法,只能自己在/usr/src和/usr/src/sys和/usr/src/sys/conf下面疯狂的grep,找文件,找引用,才有了自己的一些理解。
先说说Linux的内核文件的编译关联吧,Linux的每个文件的编译和是 kconfig配置关联在一起的,kconfig在经过make menuconfig之后,得到一个.config文件,然后每个文件夹下面的Makefile,会check这个全局的.config文件,来决定哪些 文件该编译,哪些不用编译。多说无益,参考代码即可。
FreeBSD的做法有些不一样了,Linux把哪些文件要编译分散到了每个文件夹,然后check Makefile。FreeBSD是做两个总的文件,决定哪些文件该编译哪些不该,这两个文件分别是这个路径下:
ztz0223@BTazuo:/usr/src/sys/conf % pwd
/usr/src/sys/conf
的两个文件:files,files.i386
2017-04-09
代码位置
执行 sudo apt-get install linux-source 才会获取到源代码. 否则只有HEADER文件.
执行完安装后. 代码依然会在/usr/src下 位置和BSD是一样的.
也可以从GITHUB下载. 比如要编译特定的系统的话.
2017-03-27
2017-03-22
MATLAB call python
Make sure the Python module is on the Python search path. To test if module mymod
is on the path, type:
If Python cannot find the module, MATLAB displays a Python error message.
To add mymod, in folder modpath, to the path, type:
|
|