barebox/include/boot.h
Sascha Hauer ee4cab9e58 booting: more flexible Linux bootargs generation
We currently use the environment variable 'bootargs' to get the
Linux bootargs. This patch allows for a more flexible bootargs
generation using global variables. With it the Linux bootargs
are concatenated from multiple variables. This allows to replace
parts of the bootargs string without having to reconstruct it
completely.
With this bootargs can be constructed like:

global linux.bootargs.base="console=ttyS0,115200"
global linux.bootargs.ip="ip=dhcp"
global linux.mtdparts="physmap-flash.0:512K(nor0.barebox),-(root)"

This will then automatically be combined into a kernel bootargs
string during boot.

If the 'linux.bootargs.' variables are all empty the old standard
'bootargs' way will be used.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
2012-05-14 09:16:31 +02:00

91 lines
1.8 KiB
C

#ifndef __BOOT_H
#define __BOOT_H
#include <image.h>
#include <filetype.h>
#include <of.h>
#include <linux/list.h>
#include <environment.h>
struct image_data {
/* simplest case. barebox has already loaded the os here */
struct resource *os_res;
/* if os is an uImage this will be provided */
struct uimage_handle *os;
int os_num;
/* otherwise only the filename will be provided */
char *os_file;
/*
* The address the user wants to load the os image to.
* May be UIMAGE_INVALID_ADDRESS to indicate that the
* user has not specified any address. In this case the
* handler may choose a suitable address
*/
unsigned long os_address;
/* entry point to the os. relative to the start of the image */
unsigned long os_entry;
/* if initrd is already loaded this resource will be !NULL */
struct resource *initrd_res;
/* if initrd is an uImage this will be provided */
struct uimage_handle *initrd;
int initrd_num;
/* otherwise only the filename will be provided */
char *initrd_file;
unsigned long initrd_address;
struct fdt_header *oftree;
int verify;
int verbose;
};
struct image_handler {
const char *name;
struct list_head list;
int ih_os;
enum filetype filetype;
int (*bootm)(struct image_data *data);
};
int register_image_handler(struct image_handler *handle);
#ifdef CONFIG_CMD_BOOTM_VERBOSE
static inline int bootm_verbose(struct image_data *data)
{
return data->verbose;
}
#else
static inline int bootm_verbose(struct image_data *data)
{
return 0;
}
#endif
#ifdef CONFIG_FLEXIBLE_BOOTARGS
const char *linux_bootargs_get(void);
int linux_bootargs_overwrite(const char *bootargs);
#else
static inline const char *linux_bootargs_get(void)
{
return getenv("bootargs");
}
static inline int linux_bootargs_overwrite(const char *bootargs)
{
return setenv("bootargs", bootargs);
}
#endif
#endif /* __BOOT_H */