文档详情

linux移植总结.doc

发布:2017-12-11约1.97万字共18页下载文档
文本预览下载声明
Linux移植总结 —TQ2440 自己的交叉编译器 /sgpp/lite/arm/portal/subscription?@template=lite 下载arm-none-linux-gnueabi 编译器 1、编译程序或内核时所需要使用的该交叉编译器的库( lib ) 的路径是: arm-none-linuxgnueabi/ libc/armv4t/lib/目录下的,制作文件系统时也需要使用该目录下的库; 2、编译程序或内核时需要使用的头文件在arm-none-linux-gnueabi/libc/usr/include/目录下的。 然后添加编译Qt 所必需的库:jpegser.v6b.tar.gz、libpng、libz 和libuuid(e2fprogs),在移植好这些库 之后,需要将其拷贝到前面提到的目录中(包括lib 和include)。 在编译器下的“bin/”建立若干个可执行脚本分别命名为:arm-linux-xxx(这个xxx 就是在同目录下的: arm-none-linux-gnueabi-xxx 中xxx),然后在脚本文件中添加内容如下: #!/bin/sh arm-none-linux-gnueabi-xxx -march=armv4t $* 注意:实际上只需要对gcc、gcc-4.3.3 和g++这三个制作可执行脚本,而针对其他的使用命令:#ln -s armnone- linux-gnueabi-xxx arm-linux-xxx 做成链接指向对应的编译器即可。Linux- 和Linux- 的文件结构上的区别:主要是头文件改变了地方,在Linux- 中和S3C2440 相关的头文件放在“include/asm-arm/arch-s3c2410/”目录下的,而在Linux- 中则放在了“arch/arm/mach-s3c2410/include/”、“arch/arm/plat-s3c/include”和“arch/arm/plat-s3c24xx/include” 下的,当您编写自己的驱动或者从早期版本的内核移植驱动到最新版本的内核时请注意头文件的调用。 修改Linux内核 在系统中添加对ARM的支持 进到内核源码,修改“Makefile”文件,在大概193 行“ARCH ?=(SUBARCH)”和194 行 “CROSS_COMPILE ?=”,将其修改为“ARCH =arm”和“CROSS_COMPILE =arm-linux-”,然后保存。 也可以在第一次使用“make menuconfig”命令时添加如下参数后代替前面这个步骤的:“make ARCH=arm CROSS_COMPILE=arm-linux- menuconfig 修改平台输入时钟 修改平台的时钟频率,以满足TQ2440 或SKY2440 的工作频率。修改内核源码“arch/arm/machs3c2440/ mach-smdk2440.c” 文件的大概162 行或163 行,把16.9344MHz 改为12MHz,因为TQ2440 和 SKY2440 使用的就是12MHz 的外部时钟源输入,即改rch/arm/configs/) (多多配置,总结经验,当然要结合每个文件架下的config文件与Makefile文件,学习效率会好很多。) 修改机器码 在TQ2440 或SKY2440 使用的uboot 中设定了机器码为168,所以内核这里需要修改机器码,否则会 出现不能启动的情况。机器码保存在内核源码的“arch/arm/tools/mach-types”文件中,在大概379 行,把 原来的362 改为168 保存即可。 为什么要改379 这行呢? 因为: 在内核的“ arch/arm/mach-s3c2440/mach-smdk2440.c ” 文件 MACHINE_START(S3C2440, SMDK2440)这行中的S3C2440,这个就是关键字了,然后回头看看machtypes 里面的379 行的内容,这里的S3C2440 就是机器码所在的位置了。 镜像编译 然后输入:#make zImage,就可以进行编译了,编译完毕后,会在内核源码的“arch/arm/boot/”目录 把镜像存放到指定位置 为了方便,我在这里还修改了内核源码的“arch/arm/boot/”目录下面“Makefile”文件,在58 行添加 了如下内容(红色部分所示),实现了把生成的zImage 文件复制到内核源码根目录下面,即linux- 目录下: $(obj)/zImage:$(obj)/compressed/vmlinux FORCE $(call if_changed,objcopy) @
显示全部
相似文档