[U-Boot-Users] RE: start / load addresses for initrd
Jerry Walden
jwalden at digitalatlantic.com
Wed Apr 2 01:36:04 CEST 2003
>Where did you get "fsimage.tar" from?
I made it using info obtained from MontaVista Support.
Essentially I used thier Target Configuration Tool -
the script is pasted below. An excerpt from the
tech support follows:
We recommend using TCT to build a root filesystem image. The program
you use is /opt/hardhat/host/bin/targetconf.
If you need a non-GUI tool to build an initrd, we have one
that is used with our Compaq iPAQ LSP. This is not supported
for general use in creating ramdisk images, but it should work
for you, and I've provided it here.
Instructions:
1. If you've relocated your MontaVista Linux installation to somewhere
other than the default location (/opt/hardhat/...), then you need
to edit the script and change the line
basedir = "/opt/hardhat"
to point to the correct base directory for your installation.
2. ctargetconf can only be used to build a filesystem. It will not build
a kernel as is done in targetconf.
3. Create a project in TCT but do not include a "Custom kernel". Basically,
you are creating a TCT project that will only build a filesystem, i.e.,
New Project -> (Fill in proper fields in "TCT: New Project" window,
select LSP, ***BUT*** make sure to unselect "Use Custom Kernel").
Then create a config file and choose all desired packages. Save the
config.
4. From your TCT project directory, copy the .project and *.cfg file
to your working directory where ctargetconf is located.
5. Build a filesystem image.
./ctargetconf -c test1.cfg -o fsimage.tar
To see command options, just do,
./ctargetconf
6. Making the initrd image:
The above builds a tarball of the files in the root filesystem. To
make an
actual initrd image, you have to make a file of the correct size, make
an ext2
filesystem on this file, mount the new filesystem, copy (preserving
symbolic links)
the files from your tarball into the new filesystem, then unmount the
filesystem,
sync, and compress the filesystem. The following makes a 16 MB ramdisk
image
from fsimage.tar:
mkdir mountpoint
dd if=/dev/zero of=ramdisk bs=1k count=16384
/sbin/mke2fs -q -F -m0 ramdisk
mount -o loop ramdisk mountpoint
cd mount
tar xf fsimage.tar
sync
sleep 1
sync
cd ..
umount mountpoint
sync
gzip -9 ramdisk
>What does it contain.
tar -xvf fsimage.tar
ls -al
total 36
drwxr-xr-x 9 root root 4096 Apr 1 18:27 .
drwxr-xr-x 4 root root 4096 Apr 1 18:11 ..
drwxr-xr-x 2 root root 4096 Apr 1 18:11 bin
drwxr-xr-x 2 root root 4096 Apr 1 18:11 dev
drwxr-xr-x 6 root root 4096 Apr 1 18:11 etc
drwxr-xr-x 2 root root 4096 Apr 1 18:11 lib
drwxr-xr-x 2 root root 4096 Apr 1 18:11 sbin
drwxr-xr-x 5 root root 4096 Apr 1 18:11 usr
drwxr-xr-x 4 root root 4096 Apr 1 18:11 var
>Ummm... I don't even see a filename here. I don;t see if there is an
>"init" binary or a shell or any library or any device.
Sorry about that - I need to learn how to cut and paste properly ;-)
>Which sort of output do you expect when providing such input? GIGO...
I expect none - it was a mistake.
The mounted volume contains:
ls -al mountpoint
total 26
drwxr-xr-x 10 root root 1024 Mar 20 15:34 .
drwxr-xr-x 4 root root 4096 Apr 1 18:28 ..
drwxr-xr-x 2 root root 1024 Mar 20 15:34 bin
drwxr-xr-x 2 root root 2048 Mar 20 15:34 dev
drwxr-xr-x 6 root root 1024 Mar 20 15:34 etc
drwxr-xr-x 2 root root 2048 Mar 20 15:34 lib
drwxr-xr-x 2 root root 12288 Mar 20 15:34 lost+found
drwxr-xr-x 2 root root 1024 Mar 20 15:34 sbin
drwxr-xr-x 5 root root 1024 Mar 20 15:34 usr
drwxr-xr-x 4 root root 1024 Mar 20 15:34 var
>Wolfgang Denk
#!/usr/bin/env python
#
# FILE: ctargetconf
#
# DESCRIPTION:
# ctargetconf is a scalled back, commandline version of targetconf.
#
# AUTHOR: MontaVista Software, Inc. <source at mvista.com>
#
# Copyright 2000-2001 MontaVista Software Inc.
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2 of the License, or (at your
# option) any later version.
#
# THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
# NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc.,
# 675 Mass Ave, Cambridge, MA 02139, USA.
#
import string
import sys
import os
import os.path
import getopt
#
# Find module library and add to search path
#
# The following assumes this script is installed under:
# ${basedir}/devkit/lsp/${lsp_name}/sub_dir/
thisdir = os.path.dirname(os.path.abspath(sys.argv[0]))
#basedir = os.path.normpath(os.path.join(thisdir, '../../../../'))
basedir = "/opt/hardhat"
libpath = os.path.join(basedir, 'host', 'lib', 'python')
if os.path.isdir(libpath):
sys.path.insert(1, libpath)
#
# Set relocatable base path
#
from MontaVista.Configurator.PEBackend import SetHHLBase
SetHHLBase(basedir)
from MontaVista.Configurator.PEBackend import Project, ProjectConfig,
LspDatum
from MontaVista.Configurator.PECfgComponents import PackageSelectorConfig,
TargetOptions
def _outcmd ( strdata ):
if (SuppressOutput == "FALSE"):
sys.stdout.write(strdata)
def _errcmd ( strdata ):
sys.stderr.write(strdata)
def _donecmd ( ):
sys.stderr.write("Done.\n")
WorkingDir=None
UseProjectFile="FALSE"
ProjectFile=None
LSPname=None
Config=None
StripFiles=None
OutputFile=None
SuppressOutput="FALSE"
DBVerify=None
ToolPrefix="FALSE"
def usage ():
sys.stderr.write("uTCT The command line adventure\n\n")
sys.stderr.write("\t-d <Working Directory> or --working-direcotry <Work
dir> : If ommited the Current is chosen\n")
sys.stderr.write("\t-p or --project-file
: Load Project file - optional project file\n")
sys.stderr.write("\t-c <config file> or --package-configuration <config
file> : Package Configuation (Default)\n")
sys.stderr.write("\nThese options will override the project file if
provided:\n\n")
sys.stderr.write("\t-s or --strip-files
: Strip files\n")
sys.stderr.write("\t-u or --no-strip-files
: Don\'t Strip files (Default)\n")
sys.stderr.write("\t-l <lsp name> or --lsp-name <lsp name>
: Set Lsp Name\n")
sys.stderr.write("\t-n <project name> or --project-name <project name>
: Set Project Name\n")
sys.stderr.write("\t-o <output file> or --output-file <output file>
: Output Filesystem file\n")
sys.stderr.write("\t-q or --quiet
: Suppress Most Filesystem generation\n")
sys.stderr.write("\t--db-verify
: Compare Configfile against Database\n")
sys.stderr.write("\t--get-tool-prefix
: Output Tool prefix\n\n")
sys.exit(1)
try:
opts, args = getopt.getopt(sys.argv[1:], "d:pc:sul:n:o:q",
["working-directory=","project-file",
"package-configuration=","strip-files", \
"no-strip-files","lsp-name=","project-name=","output-file=","quiet","db-veri
fy",
"get-tool-prefix" ])
except:
usage()
for o, a in opts:
if ( o == "-d" or o == "--working-directory"):
WorkingDir=a
if ( o == "-p" or o == "--project-file"):
UseProjectFile="TRUE"
if ( o == "-c" or o == "--package-configuration"):
Config = a
if ( o == "-l" or o == "--lsp-name"):
LSPname = a
if ( o == "-n" or o == "--project-name"):
print o + " " + a
if ( o == "-s" or o == "--strip-files"):
StripFiles="TRUE"
if ( o == "-u" or o == "--no-strip-files" ):
StripFiles="FALSE"
if ( o == "-o" or o == "--output-file" ):
OutputFile = a
if ( o == "-q" or o == "--quiet"):
SuppressOutput = "TRUE"
if ( o == "--db-verify"):
DBVerify="TRUE"
if ( o == "--get-tool-prefix"):
ToolPrefix="TRUE"
if ( Config == None and ToolPrefix != "TRUE" ):
sys.stderr.write("You must supply a Package Config file\n\n")
usage()
if (WorkingDir == None):
WorkingDir=os.getcwd()
if (Config != None):
PackConfig = os.path.split(Config)
myProject = Project()
if ( UseProjectFile == "TRUE" ):
myProject.Load(WorkingDir)
elif (LSPname != None):
myProject.path=WorkingDir
if ( LSPname != None):
LSP=LspDatum(LSPname)
if(ToolPrefix == "TRUE"):
print LSP.GetArchBin() + "/" + LSP.GetArchPrefix()
sys.exit(1)
myProject.SetLSP(LSP)
myProject.lspname = LSP.GetName()
if ( UseProjectFile == "FALSE" and LSPname == None):
myProject.Load(WorkingDir)
myProject.SetKernelType("Prebuilt")
myProjectConfig = ProjectConfig(myProject.GetWorkDir(), myProject)
if ( PackConfig[0] != ""):
temp = myProjectConfig.GetWorkDir()
myProjectConfig.workdir = PackConfig[0] + "/"
if ( not myProjectConfig.LoadConfig(PackConfig[1])):
sys.stderr.write("Could not read " + Config + "\n")
sys.exit(1)
myProjectConfig.workdir = temp
elif ( os.path.isfile(myProjectConfig.GetWorkDir() + "/" + PackConfig[1])):
myProjectConfig.LoadConfig(PackConfig[1])
elif ( os.path.isfile(PackConfig[1])):
temp = myProjectConfig.workdir
myProjectConfig.workdir = os.getcwd() + "/"
if ( not myProjectConfig.LoadConfig(PackConfig[1])):
sys.stderr.write("Could not read " + Config + "\n")
sys.exit(1)
myProjectConfig.workdir = temp
else:
sys.stderr.write("Could not find " + Config + "\n")
sys.exit(1)
MyLSP=myProject.GetLSP()
pinfodirlist = MyLSP.GetPackageInfoDBDirList()
packageSelCfg = PackageSelectorConfig(myProject, pinfodirlist)
packageSelCfg.SetConfig(myProjectConfig)
sys.stderr.write("Building Package Database...")
packageSelCfg.collectprocess.Wait()
sys.stderr.write("Done.\n")
MissingRequiredPackages = packageSelCfg.GetMissingRequiredPackages()
ConflictingPackages = packageSelCfg.GetConflicts()
MissingPackages = packageSelCfg.GetMissingPackages()
if ( MissingRequiredPackages != [] or MissingPackages != [] or
ConflictingPackages != [] ):
if ( MissingRequiredPackages != [] ):
print ("Missing Required Package(s):")
for MisReqPack in MissingRequiredPackages:
print MisReqPack
if ( MissingPackages != [] ):
print "Missing Package(s):"
for MisPack in MissingPackages:
print MisPack
if ( ConflictingPackages != [] ):
print "Conflicting Package(s):"
for ConPack in ConflictingPackages:
print MisReqPack
sys.stderr.write("Could not reconcile database and package configuration
file\n")
sys.exit(1)
if ( DBVerify == "TRUE" ):
print "Database Verified"
sys.exit(1)
Options = TargetOptions(myProject)
Options.SetConfig(myProjectConfig)
if ( StripFiles == "TRUE"):
Options.SetOption('strip',1)
elif ( StripFiles == "FALSE"):
Options.SetOption('strip',0)
if ( OutputFile != None ):
Options.SetOption('fsimage', OutputFile)
BuildTarfile = myProjectConfig.GetConfigBuilder( outcmd = _outcmd, errcmd =
_errcmd, donecmd = _donecmd)
sys.stderr.write("Building Target Filesystem...")
if (SuppressOutput == "FALSE"):
sys.stderr.write("\n")
BuildTarfile.Start()
sys.exit(0)
More information about the U-Boot
mailing list