Linux每日一记(2014-6-3)

Linux内核配置:

  1. make config:基于文本模式
  2. make menuconfig:基于菜单模式
  3. make oldconfig:基于旧配置文件
  4. make xconfig:图形化配置

make menuconfig错误解决:

sudo apt-get install libncurses5-dev


配置文件先在arch/arm/configs里面查找相应模板,并复制至内核初始目录,重命名为.config,修改相应配置


Linux内核编译:

  1. make zImage:用于小于512K的内核(X86)
  2. make bzImage

加V=1:

查看编译详细信息


编译好的镜像文件在arch/$(arch)/boot下


Linux制作ramdist:

mkinitrd initrd-$version $version (第二个version一定要为实际版本)


Linux编译内核模块:

make modules


Linux安装内核模块:

make modules_install


1.选项*(编译到内核)
如果编译到内核中,在内核启动时就可以自动支持相应部分的功能,这样的优点是方便、速度快,机器一启动,你就可以使用这部分功能了;缺点是会使内核变得庞大起来,不管你是否需要这部分功能,它都会存在,这就是Windows惯用的招数,建议经常使用的部分直接编译到内核中,比如网卡。

2.选项M(编译到模块)
如果编译成模块,就会生成对应的.o文件,在使用的时候可以动态加载,优点是不会使内核过分庞大,缺点是你得自己来调用这些模块。

Linux下打开pdf命令:

evince  filename.pdf


Linux 内核Makefile文件分类:

  1. 顶层Makefile:总体控制内核的编译、连接
  2. .config:配置文件,在配置内核时生成,所有Makefile文件都是根据.config来决定使用哪些文件
  3. arch/$(ARCH)/Makefile:对应体系结构的Makefile,决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像
  4. script/Makefile.*:Makefile共用的通用规则、脚本等
  5. kbuild Makefiles:各级子目录下的Makefile,相对简单,被上一层Makefile调用来编译当前目录下文件

Linux内核编译对Makefile的修改:

修改ARCH=arm:Makefile后面有很多$(ARCH)这样的语句,如arch/$(ARCH)/Makefile,可以引用arm下的Makefile

修改CROSS_COMPILE=arm-linux-:后面有CC=$(CROSS_COMPILE)gcc,这样CC=arm-linux-gcc了,ld、as也同样如此


obj-y:用来定义哪些文件被编进内核

obj-m:用来定义哪些文件被编译成可加载模块

lib-y:用来定义哪些文件被编成库文件

obj-y,obj-m:还可以用来指定要进入的下一层子目录

其中obj-m在编译模块时用到:

  1. 只有一个源文件:在obj-m中直接增加它的.o文件即可

obj-m := hello.o

        2.  多个源文件:除了在obj-m中增加一个.o文件外,还要定义一个<module_name>-objs变量来告诉Makefile这个.o文件由哪些文件组成

obj-m := hello.o

hello-objs := main.o add.o


Linux编译模块Makefile:

ifneq ($(KERNELRELEASE),)
obj-m := hello.o
hello-objs := main.o add.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

all:
$(MAKE) -C $(KDIR) M=$(PWD) modules
endif
KERNELRELESE

在内核源码的顶层Makefile中定义的一个变量,在第一次读取执行此Makefile时,KERNELRELESE没有被定义,所以make将读取执行else之后的内容

-C $(KDIR)

跳转到内核源码目录下读取那里的Makefile

M=$(PWD)

返回当前目录继续读入执行当前的Makefile。当从内核源码目录返回时,KERNELRELESE已经被定义,make将执行else之前的内容。else之前的内容由kbuild解析,指名模块源码中各文件的依赖关系,以及要生成的目标模块名


加载insmod (insmod hello.ko)

卸载rmmod (rmmod hello)

查看lsmod

加载modprobe (modprobe hello)

modprobe根据把文件/lib/modules/<$version>/modules.dep查看加载模块并加载相应依赖模块

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个文件,文件名中包含了一些数字和字母,这些数字和字母表示了一些信息。该文件是arm架构的Linux操作系统下使用的gcc编译器,具体版本为4.5.1,支持armv6指令集和vfp浮点数指令集,发布时间为2012年3月1日。 gcc编译器是一个开放源代码的编译器,它可以生成在不同平台(如arm、x86等)上运行的程序。arm架构是一种广泛使用于移动设备和嵌入式系统中的微处理器架构,armv6是其中一种指令集,vfp是浮点指令集。 该编译器可以用于开发各种arm架构下的应用程序,比如嵌入式系统、智能手机、平板电脑等。它可以将C、C++、Objective-C等高级语言编写的源代码编译成arm架构下的可执行文件。使用该编译器进行开发可以提高程序的稳定性和性能,并节省开发成本和时间。 总之,arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个在arm架构下使用的gcc编译器,可以用于开发各种类型的应用程序,具有较高的稳定性和性能。 ### 回答2: arm-linux-gcc-4.5.1-v6-vfp-20120301.rar 是一个Linux操作系统下的ARM架构编译器,其版本号为4.5.1,支持v6和vfp指令集,在2012年3月1日发布。这个编译器可以在Linux环境下编译ARM架构的代码,并支持v6和vfp指令集,可以有效地提高代码的运行效率和性能。常见的应用场景包括嵌入式系统、移动设备以及无线网络等领域。此外,这个编译器还提供了一些工具,例如汇编器、链接器、调试器等,可以帮助开发者进行代码编译、调试以及优化等工作。总之,arm-linux-gcc-4.5.1-v6-vfp-20120301.rar是一个重要的开发工具,对于ARM架构的应用程序开发具有重要意义。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值