Commit 3d72b105 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86/boot changes from Ingo Molnar:
 "Kernel image size reduction and assorted fixes and other small
  improvements."

* 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86, doc: Assign a bootloader ID for "Minimal Linux Bootloader"
  x86, boot: Exclude cmdline.c if you can't use it
  x86, boot: Exclude early_serial_console.c if can't use it.
  x86, boot: Removed unused debug flag and set code
  x86, boot: Switch output functions from command-line flags to conditional compilation
  x86, boot: Changed error putstr path to match new debug_putstr format
  x86, boot: Wrap debug printing in a new debug_putstr function
  x86, boot: Removed quiet flag and switched quiet output to debug flag
parents 79071638 c5e5c42a
...@@ -363,7 +363,8 @@ Protocol: 2.00+ ...@@ -363,7 +363,8 @@ Protocol: 2.00+
ext_loader_type <- 0x05 ext_loader_type <- 0x05
ext_loader_ver <- 0x23 ext_loader_ver <- 0x23
Assigned boot loader ids: Assigned boot loader ids (hexadecimal):
0 LILO (0x00 reserved for pre-2.00 bootloader) 0 LILO (0x00 reserved for pre-2.00 bootloader)
1 Loadlin 1 Loadlin
2 bootsect-loader (0x20, all other values reserved) 2 bootsect-loader (0x20, all other values reserved)
...@@ -378,6 +379,8 @@ Protocol: 2.00+ ...@@ -378,6 +379,8 @@ Protocol: 2.00+
C Arcturus Networks uCbootloader C Arcturus Networks uCbootloader
E Extended (see ext_loader_type) E Extended (see ext_loader_type)
F Special (0xFF = undefined) F Special (0xFF = undefined)
10 Reserved
11 Minimal Linux Bootloader <http://sebastian-plotz.blogspot.de>
Please contact <hpa@zytor.com> if you need a bootloader ID Please contact <hpa@zytor.com> if you need a bootloader ID
value assigned. value assigned.
......
#include "misc.h" #include "misc.h"
#ifdef CONFIG_EARLY_PRINTK
static unsigned long fs; static unsigned long fs;
static inline void set_fs(unsigned long seg) static inline void set_fs(unsigned long seg)
{ {
...@@ -19,3 +21,5 @@ int cmdline_find_option_bool(const char *option) ...@@ -19,3 +21,5 @@ int cmdline_find_option_bool(const char *option)
{ {
return __cmdline_find_option_bool(real_mode->hdr.cmd_line_ptr, option); return __cmdline_find_option_bool(real_mode->hdr.cmd_line_ptr, option);
} }
#endif
#include "misc.h" #include "misc.h"
#ifdef CONFIG_EARLY_PRINTK
int early_serial_base; int early_serial_base;
#include "../early_serial_console.c" #include "../early_serial_console.c"
#endif
...@@ -108,8 +108,6 @@ static void error(char *m); ...@@ -108,8 +108,6 @@ static void error(char *m);
* This is set up by the setup-routine at boot-time * This is set up by the setup-routine at boot-time
*/ */
struct boot_params *real_mode; /* Pointer to real-mode data */ struct boot_params *real_mode; /* Pointer to real-mode data */
static int quiet;
static int debug;
void *memset(void *s, int c, size_t n); void *memset(void *s, int c, size_t n);
void *memcpy(void *dest, const void *src, size_t n); void *memcpy(void *dest, const void *src, size_t n);
...@@ -170,15 +168,11 @@ static void serial_putchar(int ch) ...@@ -170,15 +168,11 @@ static void serial_putchar(int ch)
outb(ch, early_serial_base + TXR); outb(ch, early_serial_base + TXR);
} }
void __putstr(int error, const char *s) void __putstr(const char *s)
{ {
int x, y, pos; int x, y, pos;
char c; char c;
#ifndef CONFIG_X86_VERBOSE_BOOTUP
if (!error)
return;
#endif
if (early_serial_base) { if (early_serial_base) {
const char *str = s; const char *str = s;
while (*str) { while (*str) {
...@@ -265,9 +259,9 @@ void *memcpy(void *dest, const void *src, size_t n) ...@@ -265,9 +259,9 @@ void *memcpy(void *dest, const void *src, size_t n)
static void error(char *x) static void error(char *x)
{ {
__putstr(1, "\n\n"); error_putstr("\n\n");
__putstr(1, x); error_putstr(x);
__putstr(1, "\n\n -- System halted"); error_putstr("\n\n -- System halted");
while (1) while (1)
asm("hlt"); asm("hlt");
...@@ -294,8 +288,7 @@ static void parse_elf(void *output) ...@@ -294,8 +288,7 @@ static void parse_elf(void *output)
return; return;
} }
if (!quiet) debug_putstr("Parsing ELF... ");
putstr("Parsing ELF... ");
phdrs = malloc(sizeof(*phdrs) * ehdr.e_phnum); phdrs = malloc(sizeof(*phdrs) * ehdr.e_phnum);
if (!phdrs) if (!phdrs)
...@@ -332,11 +325,6 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, ...@@ -332,11 +325,6 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,
{ {
real_mode = rmode; real_mode = rmode;
if (cmdline_find_option_bool("quiet"))
quiet = 1;
if (cmdline_find_option_bool("debug"))
debug = 1;
if (real_mode->screen_info.orig_video_mode == 7) { if (real_mode->screen_info.orig_video_mode == 7) {
vidmem = (char *) 0xb0000; vidmem = (char *) 0xb0000;
vidport = 0x3b4; vidport = 0x3b4;
...@@ -349,8 +337,7 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, ...@@ -349,8 +337,7 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,
cols = real_mode->screen_info.orig_video_cols; cols = real_mode->screen_info.orig_video_cols;
console_init(); console_init();
if (debug) debug_putstr("early console in decompress_kernel\n");
putstr("early console in decompress_kernel\n");
free_mem_ptr = heap; /* Heap */ free_mem_ptr = heap; /* Heap */
free_mem_end_ptr = heap + BOOT_HEAP_SIZE; free_mem_end_ptr = heap + BOOT_HEAP_SIZE;
...@@ -369,11 +356,9 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap, ...@@ -369,11 +356,9 @@ asmlinkage void decompress_kernel(void *rmode, memptr heap,
error("Wrong destination address"); error("Wrong destination address");
#endif #endif
if (!quiet) debug_putstr("\nDecompressing Linux... ");
putstr("\nDecompressing Linux... ");
decompress(input_data, input_len, NULL, NULL, output, NULL, error); decompress(input_data, input_len, NULL, NULL, output, NULL, error);
parse_elf(output); parse_elf(output);
if (!quiet) debug_putstr("done.\nBooting the kernel.\n");
putstr("done.\nBooting the kernel.\n");
return; return;
} }
...@@ -24,9 +24,21 @@ ...@@ -24,9 +24,21 @@
/* misc.c */ /* misc.c */
extern struct boot_params *real_mode; /* Pointer to real-mode data */ extern struct boot_params *real_mode; /* Pointer to real-mode data */
void __putstr(int error, const char *s); void __putstr(const char *s);
#define putstr(__x) __putstr(0, __x) #define error_putstr(__x) __putstr(__x)
#define puts(__x) __putstr(0, __x)
#ifdef CONFIG_X86_VERBOSE_BOOTUP
#define debug_putstr(__x) __putstr(__x)
#else
static inline void debug_putstr(const char *s)
{ }
#endif
#ifdef CONFIG_EARLY_PRINTK
/* cmdline.c */ /* cmdline.c */
int cmdline_find_option(const char *option, char *buffer, int bufsize); int cmdline_find_option(const char *option, char *buffer, int bufsize);
...@@ -36,4 +48,13 @@ int cmdline_find_option_bool(const char *option); ...@@ -36,4 +48,13 @@ int cmdline_find_option_bool(const char *option);
extern int early_serial_base; extern int early_serial_base;
void console_init(void); void console_init(void);
#else
/* early_serial_console.c */
static const int early_serial_base;
static inline void console_init(void)
{ }
#endif
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment