[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [PATCH lorax/master] Add initial support for ARM based systems. - try 2



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 redhat com
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 = []

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]