140 likes | 456 Views
Linux Kernel Porting. Author: Leilei Wang. 交叉编译环境. 获取交叉编译链: http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3057 目前最新为: Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux 调整编译链:
E N D
Linux Kernel Porting Author: Leilei Wang
交叉编译环境 • 获取交叉编译链: • http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3057 • 目前最新为:Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux • 调整编译链: • 默认选择的库是ARMv5TE-Little-Endian,Soft-Float,GLIBC, 但是我们需要的是ARMv4T的库,因此可使用选项-march=armv4t指定libc/armv4t/usr/lib • 添加libjpeg, libpng, libz, tslib和libuuid(e2fprogs)库到对应的libc/armv4t/usr/lib和libc/usr/include里。以支持Qtopia的编译。
arm-linux-gcc -print-multi-directory来判断当前mach的选择,例如: HIL 4.4.1 # arm-linux-gcc -print-multi-directory armv4t
zlib: ./configure --shared --prefix=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr --libdir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib --includedir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ && make && make install libpng: ./configure --libdir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib --includedir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ --enable-shared --host=arm-linux --prefix=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr CFLAGS=-I/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ LIBS=-L/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib libjpeg: ./configure --libdir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib --includedir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ --enable-shared --host=arm-linux --prefix=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr CFLAGS=-I/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ LIBS=-L/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib
libuuid(e2fsprogs): ./configure --libdir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib --includedir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ --enable-elf-shlibs --host=arm-linux --prefix=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr CFLAGS=-I/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ LIBS=-L/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib tslib: ./configure --libdir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib --includedir=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ --enable-elf-shlibs --host=arm-linux --prefix=/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr CFLAGS=-I/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/usr/include/ LIBS=-L/root/QiuShi/4.4.1/arm-none-linux-gnueabi/libc/armv4t/usr/lib ac_cv_func_malloc_0_nonnull=yes
获取内核源码 • 查看最新版本Linux内核更新信息:http://kernelnewbies.org/Linux_2_6_32下载对应内核代码: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2
定制Linux内核 • 修改Makefile来支持ARM平台,将”ARCH ?= (SUBARCH)”和”CROSS_COMPILE ?=“改为”ARCH=arm”和”CROSS_COMPILE=arm-linux-”。 • make menuconfig加载默认配置单文件arch/arm/configs/mini2440_defconfig • 添加自己的信息:General setup->Local version->QiuShi • 其中Mini2440的机器码为:1999. 在arch/arm/tools/mach-types。将s3c2440对应机器码修改为1999 • s3c2440 ARCH_S3C2440 S3C2440 1999 • 修改时钟频率:arch/arm/mach-s3c2440/mach-smdk2440.c • s3c24xx_init_clocks(12000000); • 修改 NAND分区:arch/arm/plat-s3c24xx/comm-smdk2440.c • static struct mtd_partition smdk_default_nand_part[]; 需要和bootloader里的配置一致。supervivi可以使用vivi>part show查看.
定制Linux内核 • 添加yaffs文件系统支持: • 注意对于128MB大容量NAND需要页大小来支持 • 制作文件系统镜像文件工具mkyaffs2image需要支持128MB • BusyBox的编译: • 配置Build Options Build BusyBox as a static binary (no shared libs) • Build Options Build with Large File Support (for accessing files > 2 GB) • 构建文件系统: • 创建root_2.6.32.2将busybox编译出来的bin sbin usr linuxrc复制过来 • 创建其它目录结构dev etc home lib mnt opt proc root sys tmp var web usr/lib urs/share home/qiushi mnt/udisk mnt/sd • 串口驱动drivers/serial/s3c2410.c • sdf • dsf
etc下配置文件 • fstab:需要自动挂载的文件系统 • group:用户组 • inittab:init进程的配置文件 • shadow:使用passwd命令创建密码时需要的文件 • passwd:密码文件 • profile:用户环境配置 • mdev.conf:udev自动挂载和卸载SD卡和U盘的脚本 • resolv.conf:存放DNS服务器地址 • init.d目录:启动文件目录,rcS存放了系统启动时配置及自启动加载的进程 • sysconfig目录:存放HOSTNAME文件 • rc.d目录:存放一些自启动所调用的脚本 • boa目录:web服务器的配置脚本
threadStop th->pullup(PULLUP_REQUEST_STOP lapThreadPullup(act,lid,PULLUP_REQUEST_STOP)