Linux每日一记(2014-6-3)
来源:互联网 发布:python 服务端开发 编辑:程序博客网 时间:2024/06/09 18:45
Linux内核配置:
- make config:基于文本模式
- make menuconfig:基于菜单模式
- make oldconfig:基于旧配置文件
- make xconfig:图形化配置
make menuconfig错误解决:
sudo apt-get install libncurses5-dev配置文件先在arch/arm/configs里面查找相应模板,并复制至内核初始目录,重命名为.config,修改相应配置
Linux内核编译:
- make zImage:用于小于512K的内核(X86)
- 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文件分类:
- 顶层Makefile:总体控制内核的编译、连接
- .config:配置文件,在配置内核时生成,所有Makefile文件都是根据.config来决定使用哪些文件
- arch/$(ARCH)/Makefile:对应体系结构的Makefile,决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像
- script/Makefile.*:Makefile共用的通用规则、脚本等
- 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在编译模块时用到:
- 只有一个源文件:在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.ohello-objs := main.o add.oelseKDIR := /lib/modules/$(shell uname -r)/buildPWD := $(shell pwd)all:$(MAKE) -C $(KDIR) M=$(PWD) modulesendifKERNELRELESE
在内核源码的顶层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查看加载模块并加载相应依赖模块
- Linux每日一记(2014-6-3)
- Linux每日一记(2014-6-2)
- Linux每日一记(2014-6-4)
- Linux每日一记(2014-6-24)
- 每日一linux命令(6)-------rmdir
- 每日一linux命令(3)-------pwd
- Linux每日学习(一)
- linux每日一学-netstat指令(3)
- 每日一linux命令(1)-------ls
- 每日一linux命令(2)-------cd
- 每日一linux命令(4)-------mkdir
- 每日一linux命令(5)-------rm
- 每日一linux命令(7)-------mv
- 每日一linux命令(8)-------cp
- 每日一linux命令(9)-------touch
- 每日一linux命令(10)-------cat
- 每日一linux命令(11)-------nl
- 每日一linux命令(12)-------more
- 完美原型prototype类的继承方法
- 贡献开源项目没那么简单,你要负责到底
- Mysql字符串截取函数SUBSTRING的用法说明
- MySQL数据库开发必备常识
- 世界知名芯片厂商及其产品介绍
- Linux每日一记(2014-6-3)
- ALAssetsLibrary详解
- (转载)屌丝从毕业时的月入3000到三年后亿万身家的精彩励志之旅
- 链式栈的基本操作code_legend
- SAP部分快捷键
- mysqldump
- RAC DBCA 找不到共享磁盘
- Apple Swift编程语言入门教程
- 一晃经年