Linux核心移植(5)
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.c
mkyaffs2image.c mkyaffsimage mkyaffsimage.o
eric@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 mksquashfs
mkfontdir mkimage mk_modmap mkyaffs2image
eric@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 busybox
busybox
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 sbin
eric@eric-PC:~/Documents/busybox-1.21.1$
5、完善_install目錄
_install目錄下,僅有這些檔案還是不夠的,,還需要新增系統所需要的其他檔案,才能構成一個完整的根檔案系統
新建指令碼檔案create_yaffs2.sh,用於批量生成所需的檔案以及目錄
#生成根檔案系統所必須的其他資料夾!!!~
#!/bin/sh
echo “生成根檔案系統所必須的其他資料夾!”
mkdir root dev etc bin sbin mnt sys proc lib home tmp var usr
mkdir usr/sbin usr/bin usr/lib usr/modules usr/etc
mkdir mnt/usb mnt/nfs mnt/etc mnt/etc/init.d
mkdir lib/modules
chmod 777 tmp
sudo mknod -m 600 dev/console c 5 1
sudo mknod -m 666 dev/null c 1 3
echo “***end***”
執行指令碼之後,就可以看到自動生成的目錄
eric@eric-PC:~/Documents/busybox-1.21.1/_install$ ls
bin create_yaffs2.sh linuxrc sbin
eric@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$ ls
bin dev home linuxrc proc sbin tmp var
create_yaffs2.sh etc lib mnt root sys usr
eric@eric-PC:~/Documents/busybox-1.21.1/_install$
etc/目錄下
a)新建profile檔案
# Ash profile
# vim: syntax=sh
# No core files by default
ulimit -S -c 0 > /dev/null 2>&1
USER="'id -un'"
LOGNAME=$USER
PS1='[\[email protected]\h \W]\# '
PATH=$PATH
HOSTNAME='/bin/hostname'
export USER LOGNAME PS1 PATH
b)新建fstab檔案
proc /proc proc default 0 0
none /tmp ramfs default 0 0
none /var ramfs default 0 0
mdev /dev ramfs default 0 0
sysfs /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/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:
runlevel=S
prevlevel=N
umask 022
export 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 /dev
echo /sbin/mdev > /proc/sys/kernel/hotplug
/sbin/mdev -s
/bin/hotplug
# mounting file system specified in /etc/fstab
mkdir -p /dev/pts
mkdir -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 /var
mkdir -p /var/empty
mkdir -p /var/log
mkdir -p /var/lock
mkdir -p /var/run
mkdir -p /var/tmp
/sbin/hwclock -s -f /dev/rtc
syslogd
/etc/rc.d/init.d/netd start
echo " " > /dev/tty1
echo "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 1
echo "*************************************"
echo " Welcome to Root FileSystem! "
echo " "
echo " http://write.blog.csdn.net/postlist "
echo "*************************************"
mkdir /mnt/disk
mount -t yaffs2 /dev/mtdblock3 /mnt/disk
mount -t vfat /dev/mmcblk0p1 /home/
mount -t yaffs2 /dev/mtdblock3 /mnt/
cd /mnt/
tar zxvf /home/urbetter-rootfs-qt-2.2.0.tgz
sync
cd /
umount /mnt/
umount /home/
/sbin/ifconfig lo 127.0.0.1
chmod +x etc/init.d/ifconfig-eth0
/etc/init.d/ifconfig-eth0
/bin/qtopia &
echo " " > /dev/tty1
echo "Starting Qtopia, please waiting..." > /dev/tty1
echo " "
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 rcS
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc/init.d$
e)建立mdev.config空檔案
f)新建init檔案,同時將許可權設定為最高
#!/bin/sh
ifcofig eth0 192.168.1.0 up
ifconfig lo 127.0.0.1
ect/目錄完成後,包含如下檔案及目錄
eric@eric-PC:~/Documents/busybox-1.21.1/_install/etc$ ls
fstab 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$ ls
libanl-2.9.so libmudflap.la libresolv-2.9.so
libanl.so.1 libmudflap.so libresolv.so.2
libBrokenLocale-2.9.so libmudflap.so.0 librt-2.9.so
libBrokenLocale.so.1 libmudflap.so.0.0.0 librt.so.1
libc-2.9.so libmudflapth.a libSegFault.so
libcrypt-2.9.so libmudflapth.la libssp.a
libcrypt.so.1 libmudflapth.so libssp.la
libc.so.6 libmudflapth.so.0 libssp_nonshared.a
libdl-2.9.so libmudflapth.so.0.0.0 libssp_nonshared.la
libdl.so.2 libnsl-2.9.so libssp.so
libgcc_s.so libnsl.so.1 libssp.so.0
libgcc_s.so.1 libnss_compat-2.9.so libssp.so.0.0.0
libgomp.a libnss_compat.so.2 libstdc++.a
libgomp.la libnss_dns-2.9.so libstdc++.la
libgomp.so libnss_dns.so.2 libstdc++_pic.a
libgomp.so.1 libnss_files-2.9.so libstdc++.so
libgomp.so.1.0.0 libnss_files.so.2 libstdc++.so.6
libgomp.spec libnss_hesiod-2.9.so libstdc++.so.6.0.13
libiberty.a libnss_hesiod.so.2 libsupc++.a
libid3tag.so libnss_nis-2.9.so libsupc++.la
libid3tag.so.0 libnss_nisplus-2.9.so libthread_db-1.0.so
libid3tag.so.0.3.0 libnss_nisplus.so.2 libthread_db.so.1
libjpeg.so libnss_nis.so.2 libts-0.0.so.0
libjpeg.so.62 libpcprofile.so libts-0.0.so.0.1.1
libjpeg.so.62.0.0 libpng12.so libts.so
libm-2.9.so libpng12.so.0 libutil-2.9.so
libmad.so libpng12.so.0.35.0 libutil.so.1
libmad.so.0 libpng.so libuuid.so
libmad.so.0.2.1 libpng.so.3 libuuid.so.1
libmemusage.so libpng.so.3.35.0 libuuid.so.1.2
libm.so.6 libpthread-2.9.so libz.a
libmudflap.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$ ls
applets Config.in include Makefile.custom runit
applets_sh configs init Makefile.flags scripts
arch console-tools _install Makefile.help selinux
archival coreutils INSTALL miscutils shell
AUTHORS debianutils libbb modutils sysklogd
busybox docs libpwdgrp networking testsuite
busybox.links e2fsprogs LICENSE printutils TODO
busybox_unstripped editors loginutils procps TODO_unicode
busybox_unstripped.map examples mailutils README util-linux
busybox_unstripped.out findutils Makefile rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$ ls -l rootfs.yaffs
-rw------- 1 eric eric 21356544 12月 17 11:09 rootfs.yaffs
eric@eric-PC:~/Documents/busybox-1.21.1$
至此,根檔案系已經制作完成,下一步就要掛載啟動!
相關推薦
Linux核心移植(5)
Linux3.8.3核心移植-根檔案系統製作 根檔案系統,是在linux核心啟動後,第一個掛載的檔案系統。 mkyaffs2image工具製作 mkyaffs2image是製作根檔案系統必要的工具,由yaffs2原始碼編譯生成 1、修改f
S3c6410 linux核心移植(3)--- usb驅動出錯解決
系統啟動時及插入u盤時會列印如下錯誤:hub 1-0:1.0: Cannot enable port 1. Maybe the USB cable is bad? 此為平臺輸入時鐘設定錯誤,修改如下: 把arch/arm/mach-s3c6410/mach-smdk64
基於tiny4412的Linux核心移植(支援device tree)(三)
https://www.cnblogs.com/pengdonglin137/p/5146791.html 閱讀目錄(Content) 作者資訊 平臺簡介 注意 一、裝置樹反編譯 二、在u-boot列印資訊 三、開啟Linux核心啟動早期的log 四、在核心自解壓時dump記憶體 五、C
基於tiny4412的Linux核心移植(支援device tree)(二)
https://www.cnblogs.com/pengdonglin137/p/5143516.html 閱讀目錄(Content) 作者資訊 平臺簡介 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] QQ:4
基於tiny4412的Linux核心移植(支援device tree)(一)
https://www.cnblogs.com/pengdonglin137/p/5137941.html 閱讀目錄(Content) 作者資訊 平臺簡介 概述 步驟 回到頂部(go to top) 作者資訊 作者: 彭東林 郵箱:[email protected] Q
iTop-4412 SCP 精英版 linux-4.14.12 核心移植(2)
linux-4.14.12中對iTop-4412 SCP 精英版有支援的裝置樹的,只需要修改一些細節就可以直接使用了,在arch/arm/boot/dts目錄下有精英版支援的裝置樹 (一)修改exynos4412-itop-elite.dts 根據訊為給的開發
手把手教你移植linux核心---------OK6410(一)
配置資訊: 移植核心:linux-3.3.5 可以從 http://www.kernel.org/ 下載純正的版本 編譯環境:vmware下ubuntu11.04 交叉編譯版本:4.3.2 準備工作: 一塊OK6410開發板,交叉網線,串列埠線
基於FS4412嵌入式系統移植(5) 核心移植
這一節中我們進行核心的移植,在課上同樣是按照實驗手冊進行試驗,同樣不知道是為什麼要那麼做,所以這裡就不細講了。實驗手冊中有一些錯誤,我自己改過來上傳共同學們參考。實驗手冊修正版下載地址:FS4412系統移植實驗手冊-核心移植 實驗中使用的核心版本是3.14.0,因為我的上傳
Linux鞏固記錄(5) hadoop 2.7.4下自己編譯代碼並運行MapReduce程序
parser mod pill self add let tokenize org cto 程序代碼為 ~\hadoop-2.7.4\share\hadoop\mapreduce\sources\hadoop-mapreduce-examples-2.7.4-sourc
linux audit審計(5)--audit規則配置
類型 https 不存在 avi mit linux. 文件監控 usr RM audit可以配置規則,這個規則主要是給內核模塊下發的,內核audit模塊會按照這個規則獲取審計信息,發送給auditd來記錄日誌。 規則類型可分為: 1、控制規則:控制audit系統的
Linux自學筆記(5):Linux基礎命令
linux 基礎命令 基礎命令:date:date --help用法:date [選項]... [+格式] 或:date [-u|--utc|--universal] [MMDDhhmm[[CC]YY][-ss]]date [MMDDhhmm[[cc]yy][-ss]]:設置MM:月DD:日hh:時m
Linux驅動開發(5)——生成裝置節點
項裝置可以說是對一部分字元裝置的封裝,還有一部分不好歸類驅 動也歸到雜項裝置 雜項裝置初始化部分原始檔“drivers/char/ misc.c”,這一部分通過 Makefile可知,是強制編譯的。 雜項設備註冊標頭檔案include/linux/miscdevice
linux學習筆記(5):檔案許可權
檔案許可權 1.檔案許可權存在的意義 系統最底層安全設定方法之一 保證檔案可以被可用的使用者做相應操作 2.檔案許可權的檢視 ls -l file ls -ld dir ll file ll -d dir 3.檔案許可權的讀取 - |rw-rw-r--|
如何成為一個Linux核心開發者(經典)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Linux學習筆記(5)磁碟分割槽(parted)
Linux學習筆記(5)磁碟分割槽(parted) 演示: (1)parted /dev/sdb(可以使用help來檢視命令詳細描述) (2)p 列出當前磁碟分割槽資訊,可以看出這裡還沒有分割槽,所以下面沒有任何分割槽資訊 (3)mklabel 建立磁碟標籤,選擇gpt格式(這裡會把改
Linux作業系統入門(5)
系統的日誌管理 rsyslog的管理 /var/log/messages 服務資訊日誌 /var/log/secure 系統登陸日誌 /var/log/cron 定時任務日誌 /var/log/maillog 郵件日誌 /var/log/boot/log 系統啟動日誌
linux核心探索(3)--系統呼叫(傳參)
踩坑啊啊啊啊啊啊!!! 目錄 10、測試 核心版本: 開始: 1、編寫sys.c /usr/src/linux-4.18.11/kernel/sys.c 新增: #include <linux/linkage.
Exynos4412 核心移植(一)—— 核心配置過程分析
一、前言 1、linux核心五大功能: 程序管理(cpu) 記憶體管理(記憶體)裝置管理(驅動)網路管理(網路協議tcp/ip)檔案系統(vfs) 2、linux版本號: linux 2.6 2--->主版本號 6---->次版本號:奇數代表測試版本 偶
Exynos4412 核心移植(三)—— 核心啟動過程分析
核心啟動所用函式如下: 與移植U-Boot 的過程相似,在移植Linux 之前,先了解它的啟動過程。Linux 的過程可以分為兩部分:架構/開發板相關的引導過程、後續的通用啟動過程。對於uImage、zImage ,它們首先進行自解壓得到vmlinux
Exynos4412 核心移植(五)—— 驅動的移植
以移植自己製作的驅動,學習核心移植中的驅動移植,及 驅動程式的動態編譯和靜態編譯 硬體環境: Linux 核心版本:Linux 3.14 主機:Ubuntu 12.04發行版 目標機:FS4412平臺 交叉編譯工具:arm-none-linux-gnuea