[PATCH 4/5] ARM: move bootz code to its own file
Sascha Hauer
s.hauer at pengutronix.de
Mon Apr 4 10:31:04 EDT 2011
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
arch/arm/lib/Makefile | 1 +
arch/arm/lib/armlinux.c | 95 --------------------------------------------
arch/arm/lib/bootz.c | 100 +++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 101 insertions(+), 95 deletions(-)
create mode 100644 arch/arm/lib/bootz.c
diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index bb1c202..8165aea 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -1,5 +1,6 @@
obj-$(CONFIG_ARM_LINUX) += armlinux.o
obj-$(CONFIG_CMD_BOOTM) += bootm.o
+obj-$(CONFIG_CMD_BOOTZ) += bootz.o
obj-y += div0.o
obj-y += findbit.o
obj-y += arm.o
diff --git a/arch/arm/lib/armlinux.c b/arch/arm/lib/armlinux.c
index a37f710..bb4bcd3 100644
--- a/arch/arm/lib/armlinux.c
+++ b/arch/arm/lib/armlinux.c
@@ -232,101 +232,6 @@ void start_linux(void *adr, int swap, struct image_data *data)
kernel(0, armlinux_architecture, armlinux_bootparams);
}
-#ifdef CONFIG_CMD_BOOTZ
-struct zimage_header {
- u32 unused[9];
- u32 magic;
- u32 start;
- u32 end;
-};
-
-#define ZIMAGE_MAGIC 0x016F2818
-
-static int do_bootz(struct command *cmdtp, int argc, char *argv[])
-{
- void (*theKernel)(int zero, int arch, void *params);
- int fd, ret, swap = 0;
- struct zimage_header header;
- void *zimage;
- u32 end;
-
- if (argc != 2) {
- barebox_cmd_usage(cmdtp);
- return 1;
- }
-
- fd = open(argv[1], O_RDONLY);
- if (fd < 0) {
- perror("open");
- return 1;
- }
-
- ret = read(fd, &header, sizeof(header));
- if (ret < sizeof(header)) {
- printf("could not read %s\n", argv[1]);
- goto err_out;
- }
-
- switch (header.magic) {
-#ifdef CONFIG_BOOT_ENDIANNESS_SWITCH
- case swab32(ZIMAGE_MAGIC):
- swap = 1;
- /* fall through */
-#endif
- case ZIMAGE_MAGIC:
- break;
- default:
- printf("invalid magic 0x%08x\n", header.magic);
- goto err_out;
- }
-
- end = header.end;
-
- if (swap)
- end = swab32(end);
-
- zimage = xmalloc(end);
- memcpy(zimage, &header, sizeof(header));
-
- ret = read(fd, zimage + sizeof(header), end - sizeof(header));
- if (ret < end - sizeof(header)) {
- printf("could not read %s\n", argv[1]);
- goto err_out1;
- }
-
- if (swap) {
- void *ptr;
- for (ptr = zimage; ptr < zimage + end; ptr += 4)
- *(u32 *)ptr = swab32(*(u32 *)ptr);
- }
-
- theKernel = zimage;
-
- printf("loaded zImage from %s with size %d\n", argv[1], end);
-
- start_linux(theKernel, swap, NULL);
-
- return 0;
-
-err_out1:
- free(zimage);
-err_out:
- close(fd);
-
- return 1;
-}
-
-static const __maybe_unused char cmd_bootz_help[] =
-"Usage: bootz [FILE]\n"
-"Boot a Linux zImage\n";
-
-BAREBOX_CMD_START(bootz)
- .cmd = do_bootz,
- .usage = "bootz - start a zImage",
- BAREBOX_CMD_HELP(cmd_bootz_help)
-BAREBOX_CMD_END
-#endif /* CONFIG_CMD_BOOTZ */
-
#ifdef CONFIG_CMD_BOOTU
static int do_bootu(struct command *cmdtp, int argc, char *argv[])
{
diff --git a/arch/arm/lib/bootz.c b/arch/arm/lib/bootz.c
new file mode 100644
index 0000000..cd8f495
--- /dev/null
+++ b/arch/arm/lib/bootz.c
@@ -0,0 +1,100 @@
+#include <common.h>
+#include <command.h>
+#include <fs.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <malloc.h>
+#include <asm/byteorder.h>
+#include <asm/armlinux.h>
+#include <asm/system.h>
+
+struct zimage_header {
+ u32 unused[9];
+ u32 magic;
+ u32 start;
+ u32 end;
+};
+
+#define ZIMAGE_MAGIC 0x016F2818
+
+static int do_bootz(struct command *cmdtp, int argc, char *argv[])
+{
+ int fd, ret, swap = 0;
+ struct zimage_header header;
+ void *zimage;
+ u32 end;
+
+ if (argc != 2) {
+ barebox_cmd_usage(cmdtp);
+ return 1;
+ }
+
+ fd = open(argv[1], O_RDONLY);
+ if (fd < 0) {
+ perror("open");
+ return 1;
+ }
+
+ ret = read(fd, &header, sizeof(header));
+ if (ret < sizeof(header)) {
+ printf("could not read %s\n", argv[1]);
+ goto err_out;
+ }
+
+ switch (header.magic) {
+#ifdef CONFIG_BOOT_ENDIANNESS_SWITCH
+ case swab32(ZIMAGE_MAGIC):
+ swap = 1;
+ /* fall through */
+#endif
+ case ZIMAGE_MAGIC:
+ break;
+ default:
+ printf("invalid magic 0x%08x\n", header.magic);
+ goto err_out;
+ }
+
+ end = header.end;
+
+ if (swap)
+ end = swab32(end);
+
+ zimage = xmalloc(end);
+ memcpy(zimage, &header, sizeof(header));
+
+ ret = read(fd, zimage + sizeof(header), end - sizeof(header));
+ if (ret < end - sizeof(header)) {
+ printf("could not read %s\n", argv[1]);
+ goto err_out1;
+ }
+
+ if (swap) {
+ void *ptr;
+ for (ptr = zimage; ptr < zimage + end; ptr += 4)
+ *(u32 *)ptr = swab32(*(u32 *)ptr);
+ }
+
+ printf("loaded zImage from %s with size %d\n", argv[1], end);
+
+ start_linux(zimage, swap, NULL);
+
+ return 0;
+
+err_out1:
+ free(zimage);
+err_out:
+ close(fd);
+
+ return 1;
+}
+
+static const __maybe_unused char cmd_bootz_help[] =
+"Usage: bootz [FILE]\n"
+"Boot a Linux zImage\n";
+
+BAREBOX_CMD_START(bootz)
+ .cmd = do_bootz,
+ .usage = "bootz - start a zImage",
+ BAREBOX_CMD_HELP(cmd_bootz_help)
+BAREBOX_CMD_END
+
--
1.7.2.3
More information about the barebox
mailing list