From: "d.marlin" <dmarlin(a)redhat.com>
Signed-off-by: David A. Marlin <dmarlin(a)redhat.com>
---
share/arm.tmpl | 36 +++++++++++++++++++++++
share/config_files/uboot/boot.highbank | 5 +++
share/config_files/uboot/boot.tegra | 4 ++
share/config_files/uboot/uboot.highbank | 30 +++++++++++++++++++
share/config_files/uboot/uboot.tegra | 30 +++++++++++++++++++
share/runtime-install.tmpl | 8 ++++-
src/pylorax/__init__.py | 48 +++++++++++++++++++++++++++++-
src/pylorax/treebuilder.py | 4 ++-
8 files changed, 161 insertions(+), 4 deletions(-)
create mode 100644 share/arm.tmpl
create mode 100644 share/config_files/uboot/boot.highbank
create mode 100644 share/config_files/uboot/boot.tegra
create mode 100644 share/config_files/uboot/uboot.highbank
create mode 100644 share/config_files/uboot/uboot.tegra
diff --git a/share/arm.tmpl b/share/arm.tmpl
new file mode 100644
index 0000000..368d511
--- /dev/null
+++ b/share/arm.tmpl
@@ -0,0 +1,36 @@
+<%page args="kernels, runtime_img, runtime_base, basearch, outroot"/>
+<%
+configdir="tmp/config_files/uboot"
+BOOTDIR="boot"
+KERNELDIR=BOOTDIR
+UIMAGE_ADDRESS="0x00008000"
+INITRD_ADDRESS="0x00000000"
+# U-Boot will only handle one kernel
+kernel = kernels[0]
+%>
+
+## install bootloader (such as it is) and bootloader config
+
+mkdir ${BOOTDIR}
+# default to Trim Slice (tegra) for now
+install ${configdir}/boot.tegra ${BOOTDIR}/boot.cmd
+
+## configure bootloader
+#replace @INITRD_LOAD_ADDRESS@ ${INITRD_ADDRESS} ${BOOTDIR}/boot.cmd
+#replace @IMAGE_LOAD_ADDRESS@ ${UIMAGE_ADDRESS} ${BOOTDIR}/boot.cmd
+
+runcmd mkimage \
+ -A arm -O linux -T script -C none \
+ -a 0 -e 0 -n "Trim Slice boot script" \
+ -d ${outroot}/${BOOTDIR}/boot.cmd ${outroot}/${BOOTDIR}/boot.scr
+
+
+install ${runtime_img} ${BOOTDIR}
+#treeinfo stage2 mainimage boot/${runtime_base}
+
+## install kernel
+installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/kernel.img
+installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
+
+## FIXME: ARM may need some extra boot config
+
diff --git a/share/config_files/uboot/boot.highbank b/share/config_files/uboot/boot.highbank
new file mode 100644
index 0000000..b24e660
--- /dev/null
+++ b/share/config_files/uboot/boot.highbank
@@ -0,0 +1,5 @@
+setenv bootargs console=ttyAMA0 root=/dev/sda2 rw rootwait earlyprintk rd_NO_PLYMOUTH
+ext2load scsi 0:1 600000 uImage
+ext2load scsi 0:1 880000 uInitrd
+ext2load scsi 0:1 1000000 highbank.dtb
+bootm 600000 880000 1000000
diff --git a/share/config_files/uboot/boot.tegra b/share/config_files/uboot/boot.tegra
new file mode 100644
index 0000000..44f16bc
--- /dev/null
+++ b/share/config_files/uboot/boot.tegra
@@ -0,0 +1,4 @@
+setenv bootargs mem=384M@0M mem=512M@512M nvmem=128M@384M vmalloc=248M video=tegrafb console=ttyS0,115200n8 rw root=/dev/sda3 nohdparm rootwait earlyprintk rd_NO_PLYMOUTH
+ext2load usb 0:3 4080000 /boot/uImage
+ext2load usb 0:3 4480000 /boot/uInitrd
+bootm 4080000 4480000
diff --git a/share/config_files/uboot/uboot.highbank b/share/config_files/uboot/uboot.highbank
new file mode 100644
index 0000000..0b83dee
--- /dev/null
+++ b/share/config_files/uboot/uboot.highbank
@@ -0,0 +1,30 @@
+# Settings for uBoot setup in /sbin/new-kernel-pkg
+#
+# Default values are provided below (as comments)
+#
+# WARNING: These values affect where grubby installs and removes
+# uBoot kernel images. Changing these _after_ kernels have
+# been installed may cause removing a kernel image to fail.
+
+# directory where uBoot images and scripts are found
+#UBOOT_DIR=/boot/uboot
+UBOOT_DIR=/boot
+
+# name of the text file containing the list of installed kernel versions
+# NOTE: The versions are in order of installation. The last entry should
+# always be the default boot kernel version.
+#UBOOT_KLIST=klist.txt
+
+# device partition where uBoot images reside; mounted on $UBOOT_DIR
+#UBOOT_DEVICE=mmcblk0p1
+UBOOT_DEVICE=sda1
+
+# NOTE: Both of the following files are automatically overwritte
+# when a kernel package is installed or removed.
+
+# default kernel uImage file name
+#UBOOT_UIMAGE=uImage
+
+# default initrd uInitrd file name
+#UBOOT_UINITRD=uInitrd
+
diff --git a/share/config_files/uboot/uboot.tegra b/share/config_files/uboot/uboot.tegra
new file mode 100644
index 0000000..0b83dee
--- /dev/null
+++ b/share/config_files/uboot/uboot.tegra
@@ -0,0 +1,30 @@
+# Settings for uBoot setup in /sbin/new-kernel-pkg
+#
+# Default values are provided below (as comments)
+#
+# WARNING: These values affect where grubby installs and removes
+# uBoot kernel images. Changing these _after_ kernels have
+# been installed may cause removing a kernel image to fail.
+
+# directory where uBoot images and scripts are found
+#UBOOT_DIR=/boot/uboot
+UBOOT_DIR=/boot
+
+# name of the text file containing the list of installed kernel versions
+# NOTE: The versions are in order of installation. The last entry should
+# always be the default boot kernel version.
+#UBOOT_KLIST=klist.txt
+
+# device partition where uBoot images reside; mounted on $UBOOT_DIR
+#UBOOT_DEVICE=mmcblk0p1
+UBOOT_DEVICE=sda1
+
+# NOTE: Both of the following files are automatically overwritte
+# when a kernel package is installed or removed.
+
+# default kernel uImage file name
+#UBOOT_UIMAGE=uImage
+
+# default initrd uInitrd file name
+#UBOOT_UINITRD=uInitrd
+
diff --git a/share/runtime-install.tmpl b/share/runtime-install.tmpl
index 29c8565..aadb47e 100644
--- a/share/runtime-install.tmpl
+++ b/share/runtime-install.tmpl
@@ -11,7 +11,13 @@ installpkg iscsi-initiator-utils
installpkg firstaidkit-plugin-{passwd,key-recovery,mdadm-conf}
## kernel and firmware
-installpkg kernel
+## ARM kernels are platform specific
+%if basearch in ("arm", "armhfp") and arch.platform != None:
+ installpkg kernel-${arch.platform}
+%else:
+ installpkg kernel
+%endif
+
%if basearch != "s390x":
installpkg *-firmware
%endif
diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py
index 2133d60..1c13de7 100644
--- a/src/pylorax/__init__.py
+++ b/src/pylorax/__init__.py
@@ -55,13 +55,57 @@ class ArchData(DataHolder):
lib64_arches = ("x86_64", "ppc64", "sparc64", "s390x", "ia64")
bcj_arch = dict(i386="x86", x86_64="x86",
ppc="powerpc", ppc64="powerpc",
- sparc="sparc", sparc64="sparc")
+ sparc="sparc", sparc64="sparc",
+ armv5tel="arm", armv7l="arm",
+ armv7hl="armhfp")
+
def __init__(self, buildarch):
self.buildarch = buildarch
self.basearch = getBaseArch(buildarch)
self.libdir = "lib64" if self.basearch in self.lib64_arches else "lib"
self.bcj = self.bcj_arch.get(self.basearch)
+ self.platform = None
+ if self.basearch in ("arm", "armhfp"):
+ self.platform = self.getARMMachine()
+
+
+ ## Get the ARM processor variety.
+ # @return The ARM processor variety type, or 0 if not ARM.
+ def getARMMachine(self):
+ if not os.uname()[4].startswith('arm'):
+ return 0
+
+ armMachine = None
+ machine = None
+
+ # ARM machine hash
+ armType = {
+ 'OMAP3 Beagle Board' : 'omap',
+ 'OMAP4 Panda board' : 'omap',
+ 'trimslice' : 'tegra',
+ 'Marvell GuruPlug Reference Board' : 'kirkwood',
+ 'Efika MX' : 'imx',
+ 'Genesi Efika MX' : 'imx',
+ 'Genesi Efika MX (Smartbook)' : 'imx',
+ 'Highbank' : 'highbank',
+ }
+
+ f = open('/proc/cpuinfo', 'r')
+ lines = f.readlines()
+ f.close()
+ for line in lines:
+ if line.find('Hardware') != -1:
+ machine = line.split(':')[1]
+
+ if machine is not None:
+ for type in armType.items():
+ if part.find(type[0]) != -1:
+ armMachine = type[1]
+
+ return armMachine
+
+
class Lorax(BaseLoraxClass):
def __init__(self):
@@ -173,7 +217,7 @@ class Lorax(BaseLoraxClass):
logger.info("setting up build architecture")
self.arch = ArchData(buildarch)
- for attr in ('buildarch', 'basearch', 'libdir'):
+ for attr in ('buildarch', 'basearch', 'libdir', 'platform'):
logger.debug("self.arch.%s = %s", attr, getattr(self.arch,attr))
logger.info("setting up build parameters")
diff --git a/src/pylorax/treebuilder.py b/src/pylorax/treebuilder.py
index 50fb1f9..9809ebc 100644
--- a/src/pylorax/treebuilder.py
+++ b/src/pylorax/treebuilder.py
@@ -39,6 +39,8 @@ templatemap = {
'sparc64': 'sparc.tmpl',
's390': 's390.tmpl',
's390x': 's390.tmpl',
+ 'arm': 'arm.tmpl',
+ 'armhfp': 'arm.tmpl',
}
def generate_module_info(moddir, outfile=None):
@@ -154,7 +156,7 @@ class TreeBuilder(object):
def __init__(self, product, arch, inroot, outroot, runtime, isolabel, templatedir=None):
# NOTE: if you pass an arg named "runtime" to a mako template it'll
# clobber some mako internal variables - hence "runtime_img".
- self.vars = DataHolder(arch=arch, product=product, runtime_img=runtime,
+ self.vars = DataHolder(arch=arch, platform=arch.platform, product=product, runtime_img=runtime,
runtime_base=basename(runtime),
inroot=inroot, outroot=outroot,
basearch=arch.basearch, libdir=arch.libdir,
--
1.7.6.5