Linux内核移植(5)
来源:互联网 发布:北京金汤js防水 编辑:程序博客网 时间:2024/06/05 02:25
Linux3.8.3内核移植-根文件系统制作
根文件系统,是在linux内核启动后,第一个挂载的文件系统。
mkyaffs2image工具制作
mkyaffs2image是制作根文件系统必要的工具,由yaffs2源码编译生成
1、修改flash属性定义,mkyaffs2image.c
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ gedit mkyaffs2image.c
根据板载flash容量进行修正
// Adjust these to match your NAND LAYOUT:#define chunkSize 2048#define spareSize 64#define pagesPerBlock 64
2、修改yportenv.h,添加文件系统类型定义
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/direct$ gedit yportenv.h
添加如下 CONFIG_YAFFS_DEFINES_TYPES 定义
#ifndef __YPORTENV_H__#define __YPORTENV_H__#define CONFIG_YAFFS_DEFINES_TYPES //eric++ 2017-12-17
3、make
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ make
之后生成mkyaffs2image
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ ls mk*mkyaffs2image mkyaffs2image.o mkyaffsimage.cmkyaffs2image.c mkyaffsimage mkyaffsimage.oeric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$
4、将mkyaffs2image复制到系统用户目录,供制作根文件系统使用
eric@eric-PC:~/Documents/linux-3.8.3/yaffs2-5dce9cd/utils$ cp mkyaffs2image /usr/bin/
eric@eric-PC:/usr/bin$ ls mk*mkfifo mkfontscale mkmanifest mksquashfsmkfontdir mkimage mk_modmap mkyaffs2imageeric@eric-PC:/usr/bin$
根文件系统制作
制作根文件系统需要使用到BusyBox下载地址,和yaffs2同理,需要下载和linux3.8.3同时期的版本,以便避免版本之间的不兼容性。在此我们使用的版本为:
29 June 2013 – BusyBox 1.21.1 (stable)
1、解压后,修改Makefile
eric@eric-PC:~/Documents/busybox-1.21.1$ gedit Makefile
完善交叉编译路径,以及编译CPU类型
CROSS_COMPILE ?= /usr/local/arm/arm-linux-gcc-4.4.3/bin/arm-linux-#eric++ 2017-12-17
ARCH ?= arm#$(SUBARCH) eric++ 2017-12-17
2、进行配置
eric@eric-PC:~/Documents/busybox-1.21.1$ make menuconfig
进入目录
Busybox Settings ---> Build Options ---> () Cross Compiler prefix (NEW)
键入
/usr/local/arm/arm-linux-gcc-4.4.3/bin/arm-linux-
选择Don’t use /usr
General Configuration ---> [*] Don't use /usr
3、make
eric@eric-PC:~/Documents/busybox-1.21.1$ make
成功之后,生成busybox文件
eric@eric-PC:~/Documents/busybox-1.21.1$ ls busyboxbusybox
4、make install
eric@eric-PC:~/Documents/busybox-1.21.1$ make install
生成_install文件夹,同时包含如下文件/文件夹
eric@eric-PC:~/Documents/busybox-1.21.1$ ls _install/bin linuxrc sbineric@eric-PC:~/Documents/busybox-1.21.1$
5、完善_install目录
_install目录下,仅有这些文件还是不够的,,还需要添加系统所需要的其他文件,才能构成一个完整的根文件系统
新建脚本文件create_yaffs2.sh,用于批量生成所需的文件以及目录
#生成根文件系统所必须的其他文件夹!!!~#!/bin/shecho “生成根文件系统所必须的其他文件夹!”mkdir root dev etc bin sbin mnt sys proc lib home tmp var usrmkdir usr/sbin usr/bin usr/lib usr/modules usr/etcmkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.dmkdir lib/moduleschmod 777 tmpsudo mknod -m 600 dev/console c 5 1sudo mknod -m 666 dev/null c 1 3echo “***end***”
执行脚本之后,就可以看到自动生成的目录
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ lsbin create_yaffs2.sh linuxrc sbineric@eric-PC:~/Documents/busybox-1.21.1/_install$ sh create_yaffs2.sh “生成根文件系统所必须的其他文件夹!”mkdir: 无法创建目录"bin": 文件已存在mkdir: 无法创建目录"sbin": 文件已存在[sudo] eric 的密码:“***end***”eric@eric-PC:~/Documents/busybox-1.21.1/_install$ lsbin dev home linuxrc proc sbin tmp varcreate_yaffs2.sh etc lib mnt root sys usreric@eric-PC:~/Documents/busybox-1.21.1/_install$
etc/目录下
a)新建profile文件
# Ash profile # vim: syntax=sh# No core files by defaultulimit -S -c 0 > /dev/null 2>&1USER="'id -un'"LOGNAME=$USERPS1='[\u@\h \W]\# 'PATH=$PATHHOSTNAME='/bin/hostname'export USER LOGNAME PS1 PATH
b)新建fstab文件
proc /proc proc default 0 0none /tmp ramfs default 0 0none /var ramfs default 0 0mdev /dev ramfs default 0 0sysfs /sys sysfs default 0 0
c)新建inittab
::sysinit:/etc/init.d/rcS::askfirst:-bin/sh::ctrlaltdel:/bin/umount -a -r::shutdown:/bin umount -a -r::shutdown:/sbin/swapoff -a
d)新建init.d子目录,同时在init.d目录下建立rcS文件
#! /bin/shPATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:runlevel=Sprevlevel=Numask 022export PATH runlevel prevlevel## Trap CTRL-C &c only in this shell so we can interrupt subprocesses.#trap ":" INT QUIT TSTP/bin/hostname hcm /bin/mount -n -t proc none /proc/bin/mount -n -t sysfs none /sys/bin/mount -n -t usbfs none /proc/bus/usb/bin/mount -t ramfs none /devecho /sbin/mdev > /proc/sys/kernel/hotplug/sbin/mdev -s/bin/hotplug# mounting file system specified in /etc/fstabmkdir -p /dev/ptsmkdir -p /dev/shm/bin/mount -n -t devpts none /dev/pts -o mode=0622/bin/mount -n -t tmpfs tmpfs /dev/shm/bin/mount -n -t ramfs none /tmp/bin/mount -n -t ramfs none /varmkdir -p /var/emptymkdir -p /var/logmkdir -p /var/lockmkdir -p /var/runmkdir -p /var/tmp/sbin/hwclock -s -f /dev/rtcsyslogd/etc/rc.d/init.d/netd startecho " " > /dev/tty1echo "Starting networking..." > /dev/tty1#sleep 1#/etc/rc.d/init.d/httpd start#echo " " > /dev/tty1#echo "Starting web server..." > /dev/tty1#sleep 1#/etc/rc.d/init.d/leds start#echo " " > /dev/tty1#echo "Starting leds service..." > /dev/tty1#echo " "#sleep 1echo "*************************************" echo " Welcome to Root FileSystem! " echo " " echo " http://write.blog.csdn.net/postlist "echo "*************************************" mkdir /mnt/diskmount -t yaffs2 /dev/mtdblock3 /mnt/diskmount -t vfat /dev/mmcblk0p1 /home/mount -t yaffs2 /dev/mtdblock3 /mnt/cd /mnt/tar zxvf /home/urbetter-rootfs-qt-2.2.0.tgzsynccd /umount /mnt/umount /home//sbin/ifconfig lo 127.0.0.1chmod +x etc/init.d/ifconfig-eth0 /etc/init.d/ifconfig-eth0/bin/qtopia &echo " " > /dev/tty1echo "Starting Qtopia, please waiting..." > /dev/tty1echo " "echo "Starting Qtopia, please waiting..."
同时赋予rcS最大权限
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$ chmod 777 rcS eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$ ls -l总用量 4-rwxrwxrwx 1 eric eric 1779 12月 17 10:53 rcSeric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$
e)建立mdev.config空文件
f)新建init文件,同时将权限设置为最高
#!/bin/shifcofig eth0 192.168.1.0 upifconfig lo 127.0.0.1
ect/目录完成后,包含如下文件及目录
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc$ lsfstab init init.d inittab mdev.config profile
为lib目录添加所需库文件
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ cp /usr/local/arm/arm-linux-gcc-4.4.3/arm-none-linux-gnueabi/lib/*lib* lib/eric@eric-PC:~/Documents/busybox-1.21.1/_install$ cd lib/eric@eric-PC:~/Documents/busybox-1.21.1/_install/lib$ lslibanl-2.9.so libmudflap.la libresolv-2.9.solibanl.so.1 libmudflap.so libresolv.so.2libBrokenLocale-2.9.so libmudflap.so.0 librt-2.9.solibBrokenLocale.so.1 libmudflap.so.0.0.0 librt.so.1libc-2.9.so libmudflapth.a libSegFault.solibcrypt-2.9.so libmudflapth.la libssp.alibcrypt.so.1 libmudflapth.so libssp.lalibc.so.6 libmudflapth.so.0 libssp_nonshared.alibdl-2.9.so libmudflapth.so.0.0.0 libssp_nonshared.lalibdl.so.2 libnsl-2.9.so libssp.solibgcc_s.so libnsl.so.1 libssp.so.0libgcc_s.so.1 libnss_compat-2.9.so libssp.so.0.0.0libgomp.a libnss_compat.so.2 libstdc++.alibgomp.la libnss_dns-2.9.so libstdc++.lalibgomp.so libnss_dns.so.2 libstdc++_pic.alibgomp.so.1 libnss_files-2.9.so libstdc++.solibgomp.so.1.0.0 libnss_files.so.2 libstdc++.so.6libgomp.spec libnss_hesiod-2.9.so libstdc++.so.6.0.13libiberty.a libnss_hesiod.so.2 libsupc++.alibid3tag.so libnss_nis-2.9.so libsupc++.lalibid3tag.so.0 libnss_nisplus-2.9.so libthread_db-1.0.solibid3tag.so.0.3.0 libnss_nisplus.so.2 libthread_db.so.1libjpeg.so libnss_nis.so.2 libts-0.0.so.0libjpeg.so.62 libpcprofile.so libts-0.0.so.0.1.1libjpeg.so.62.0.0 libpng12.so libts.solibm-2.9.so libpng12.so.0 libutil-2.9.solibmad.so libpng12.so.0.35.0 libutil.so.1libmad.so.0 libpng.so libuuid.solibmad.so.0.2.1 libpng.so.3 libuuid.so.1libmemusage.so libpng.so.3.35.0 libuuid.so.1.2libm.so.6 libpthread-2.9.so libz.alibmudflap.a libpthread.so.0 modules
用mkyaffs2image工具制作根文件系统
eric@eric-PC:~/Documents/busybox-1.21.1$ mkyaffs2image _install/ rootfs.yaffs
之后生成rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$ lsapplets Config.in include Makefile.custom runitapplets_sh configs init Makefile.flags scriptsarch console-tools _install Makefile.help selinuxarchival coreutils INSTALL miscutils shellAUTHORS debianutils libbb modutils sysklogdbusybox docs libpwdgrp networking testsuitebusybox.links e2fsprogs LICENSE printutils TODObusybox_unstripped editors loginutils procps TODO_unicodebusybox_unstripped.map examples mailutils README util-linuxbusybox_unstripped.out findutils Makefile rootfs.yaffseric@eric-PC:~/Documents/busybox-1.21.1$ ls -l rootfs.yaffs -rw------- 1 eric eric 21356544 12月 17 11:09 rootfs.yaffseric@eric-PC:~/Documents/busybox-1.21.1$
至此,根文件系已经制作完成,下一步就要挂载启动!
- Linux内核移植(5)
- Linux内核移植(powerpc)
- linux内核移植(6410)
- linux内核移植(待续)
- Linux内核移植(1)
- Linux内核移植(2)
- Linux内核移植(3)
- Linux内核移植(4)
- Linux内核移植(6)
- arm-linux移植手记(三)Linux内核移植
- arm-linux移植手记(三)Linux内核移植
- Linux驱动移植(四)——Linux内核移植
- S3c6410 linux内核移植(5)---改进触摸屏驱动
- linux-3.4.5内核移植到MPC8306
- Linux 3.3.5 内核移植 for ok6410
- linux 内核移植(基本框架)
- linux-2.6.35.3内核移植(s3c2440)
- linux 内核移植(基本框架)
- Stm32F407ZGT6 串口通迅 USART3
- python时间处理
- 手把手教你Chrome扩展开发:本地存储篇
- teamviewer的设计
- spring在多个service中的方法不在同一个事物
- Linux内核移植(5)
- MyBatis框架搭建(一)
- 使用OpenSSL进行DES加密
- BZOJ2120 数颜色 【带修改莫队】
- Teamviewer 远程ssh命令行更改密码启动
- fill-column,一个使用比变量的例子
- 逐个插入建堆
- 软件工程第一章
- Java面试题-框架篇八