David Marlin wrote:
Will Woods wrote:
On Mon, 2012-06-11 at 10:30 -0500, David Marlin wrote:
This is my second attempt to add ARM support to Lorax. Based on
feedback and comments from other users we have reworked the patch to
install all supported ARM kernel variants to create a single install
tree. This eliminates the platform hash/lookup from the earlier
version and simplifies the patch a bit.
The patch was made against lorax/master, and tested by applying it
to lorax-17.25.
Overall the patch looks pretty clean. I'm not sure about the bcj_arch
values, though:
diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py
index 25cccb3..0606fbd 100644
--- a/src/pylorax/__init__.py
+++ b/src/pylorax/__init__.py
@@ -57,7 +57,10 @@ 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)
The 'bcj_arch' dict is for use with the LZMA2 "BCJ filter" compression
feature (as used by mksquashfs). Valid BCJ arches for arm are "arm" and
"armthumb", at least in my version of mksquashfs.
The BCJ filter basically does some address conversion magic on
executable code to make it compress better, so it depends on the
instruction set / address size being used. I'm pretty sure we want "arm"
for all of the arm basearches we care about.
Thank you for the explanation. I was just setting up the two
basearches we use, without really understanding what the bcj_arch
required. As I understand it, all our ARM kernels support thumb, but
none of them are really using it, so using 'arm' for all sounds right.
I will incorporate this change along with any other suggestions when I
submit the revised patch.
I have incorporated all suggestions and recreated the patch (attached).
I applied it to the lorax-17.26 SRPM, built, and tested it on Trim Slice
and Highbank ARM systems.
If there are no additional suggestions, please apply this to lorax/master.
Thank you,
d.marlin
==========
Thanks again,
d.marlin
==========
-w
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
diff --git a/share/arm.tmpl b/share/arm.tmpl
new file mode 100644
index 0000000..a6817f4
--- /dev/null
+++ b/share/arm.tmpl
@@ -0,0 +1,78 @@
+<%page args="kernels, runtime_img, runtime_base, basearch, outroot, arch"/>
+<%
+configdir="tmp/config_files/uboot"
+PXEBOOTDIR="images/pxeboot"
+BOOTDIR="boot"
+KERNELDIR=PXEBOOTDIR
+LIVEDIR="LiveOS"
+
+# different platforms use different kernel load addresses.
+# include a 'baseline' kernel for no 'flavor'.
+kernelAddress = { 'baseline' : '0x00008000',
+ 'highbank' : '0x00008000',
+ 'imx' : '0x90008000',
+ 'kirkwood' : '0x00008000',
+ 'omap' : '0x80008000',
+ 'tegra' : '0x00008000',
+ }
+%>
+
+mkdir ${LIVEDIR}
+install ${runtime_img} ${LIVEDIR}/squashfs.img
+treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img
+
+## install kernels
+mkdir ${KERNELDIR}
+%for kernel in kernels:
+ %if kernel.flavor:
+ installkernel images-${kernel.flavor}-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz-${kernel.flavor}
+ installinitrd images-${kernel.flavor}-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd-${kernel.flavor}.img
+
+ # create U-Boot wrapped images
+
+ runcmd mkimage \
+ -A arm -O linux -T ramdisk -C none \
+ -a 0 -e 0 \
+ -n "${product.name} ${product.version} ${kernel.flavor} ${kernel.arch}" \
+ -d ${outroot}/${KERNELDIR}/initrd-${kernel.flavor}.img \
+ ${outroot}/${KERNELDIR}/uInitrd-${kernel.flavor}
+
+ runcmd mkimage \
+ -A arm -O linux -T kernel -C none \
+ -a ${kernelAddress[kernel.flavor]} -e ${kernelAddress[kernel.flavor]} \
+ -n "${product.name} ${product.version} ${kernel.flavor} ${kernel.arch}" \
+ -d ${outroot}/${KERNELDIR}/vmlinuz-${kernel.flavor} \
+ ${outroot}/${KERNELDIR}/uImage-${kernel.flavor}
+
+ treeinfo images-${kernel.flavor}-${basearch} uimage ${KERNELDIR}/uImage-${kernel.flavor}
+ treeinfo images-${kernel.flavor}-${basearch} uinitrd ${KERNELDIR}/uInitrd-${kernel.flavor}
+
+ %else:
+ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz
+ installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img
+
+ # create U-Boot wrapped images
+
+ runcmd mkimage \
+ -A arm -O linux -T ramdisk -C none \
+ -a 0 -e 0 \
+ -n "${product.name} ${product.version} ${kernel.arch}" \
+ -d ${outroot}/${KERNELDIR}/initrd.img \
+ ${outroot}/${KERNELDIR}/uInitrd
+
+ runcmd mkimage \
+ -A arm -O linux -T kernel -C none \
+ -a ${kernelAddress['baseline']} -e ${kernelAddress['baseline']} \
+ -n "${product.name} ${product.version} ${kernel.arch}" \
+ -d ${outroot}/${KERNELDIR}/vmlinuz \
+ ${outroot}/${KERNELDIR}/uImage
+
+ treeinfo images-${basearch} uimage ${KERNELDIR}/uImage
+ treeinfo images-${basearch} uinitrd ${KERNELDIR}/uInitrd
+
+ %endif
+%endfor
+
+
+## FIXME: ARM may need some extra boot config
+
diff --git a/share/runtime-install.tmpl b/share/runtime-install.tmpl
index 90c1a1c..21d3916 100644
--- a/share/runtime-install.tmpl
+++ b/share/runtime-install.tmpl
@@ -20,6 +20,10 @@ installpkg kernel
%endif
## arch-specific packages (bootloaders etc.)
+%if basearch in ("arm", "armhfp"):
+ installpkg kernel-highbank kernel-imx kernel-kirkwood kernel-omap kernel-tegra
+ installpkg uboot-tools
+%endif
%if basearch == "i386":
installpkg kernel-PAE gpart
%endif
diff --git a/src/pylorax/__init__.py b/src/pylorax/__init__.py
index 25cccb3..c7732b6 100644
--- a/src/pylorax/__init__.py
+++ b/src/pylorax/__init__.py
@@ -57,7 +57,9 @@ 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",
+ arm="arm", armhfp="arm")
+
def __init__(self, buildarch):
self.buildarch = buildarch
self.basearch = getBaseArch(buildarch)
diff --git a/src/pylorax/treebuilder.py b/src/pylorax/treebuilder.py
index 0ec651f..10b18c7 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):
@@ -258,7 +260,7 @@ class TreeBuilder(object):
def findkernels(root="/", kdir="boot"):
# To find possible flavors, awk '/BuildKernel/ { print $4 }' kernel.spec
- flavors = ('debug', 'PAE', 'PAEdebug', 'smp', 'xen')
+ flavors = ('debug', 'PAE', 'PAEdebug', 'smp', 'xen', 'highbank', 'imx', 'kirkwood', 'omap', 'tegra')
kre = re.compile(r"vmlinuz-(?P<version>.+?\.(?P<arch>[a-z0-9_]+)"
r"(\.(?P<flavor>{0}))?)$".format("|".join(flavors)))
kernels = []
_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list