1. 程式人生 > >Linux核心移植(5)

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 1217 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 1217 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自學筆記5Linux基礎命令

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