1 / 14

Linux Kernel Porting

Linux Kernel Porting. Author: Leilei Wang. 交叉编译环境. 获取交叉编译链: http://www.codesourcery.com/sgpp/lite/arm/portal/subscription3057 目前最新为: Sourcery G++ Lite 2009q3-67 for ARM GNU/Linux 调整编译链:

gianna
Télécharger la présentation

Linux Kernel Porting

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linux Kernel Porting Author: Leilei Wang

  2. 交叉编译环境 • 获取交叉编译链: • 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的编译。

  3. arm-linux-gcc -print-multi-directory来判断当前mach的选择,例如: HIL 4.4.1 # arm-linux-gcc -print-multi-directory armv4t

  4. 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

  5. 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

  6. 获取内核源码 • 查看最新版本Linux内核更新信息:http://kernelnewbies.org/Linux_2_6_32下载对应内核代码: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.2.tar.bz2

  7. 定制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查看.

  8. 定制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

  9. 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服务器的配置脚本

  10. threadStop th->pullup(PULLUP_REQUEST_STOP lapThreadPullup(act,lid,PULLUP_REQUEST_STOP)

More Related