Difference between revisions of "Building a kernel from Buffalos source"

From NAS-Central Buffalo - The Linkstation Wiki
Jump to: navigation, search
Line 11: Line 11:
 
I had to edit some files, because the original source from buffalo was not error free (to be gentle).
 
I had to edit some files, because the original source from buffalo was not error free (to be gentle).
  
=== Real error due to missing forward declaration ===
+
=== Real errors ===
  
 
How could it be, that Buffalo provides sources which fail to build due to beginners bugs (missing forward declaration resp. using of a function before implementing it)? Also warnings about implicit declaration of a function should ring some bells, because it is a sign of a missing include. Please excuse that I was too lazy to solve this by determining the "correct" include statements. I used "correct" forward declarations instead.
 
How could it be, that Buffalo provides sources which fail to build due to beginners bugs (missing forward declaration resp. using of a function before implementing it)? Also warnings about implicit declaration of a function should ring some bells, because it is a sign of a missing include. Please excuse that I was too lazy to solve this by determining the "correct" include statements. I used "correct" forward declarations instead.
Line 21: Line 21:
 
   void bfSetMagicKey(unsigned int key);
 
   void bfSetMagicKey(unsigned int key);
 
   unsigned int bfGetMagicKey(void);
 
   unsigned int bfGetMagicKey(void);
 +
 +
This wrong coding is my favourite, because of missing function call brackets, which is a typical beginners bug. Due to dependency problems, I did not solve the bug, but accepted the outcome. It "just" causes no output at the serial console if the output is done via strput.
 +
 +
include/asm/arch/uncompress.h:
 +
 +
  include/asm/arch/uncompress.h:34: warning: the address of `bfIsSerialConsoleEnable', will always evaluate as `true'
 +
  
 
=== Missing includes solved by correct forward declaration ===
 
=== Missing includes solved by correct forward declaration ===
Line 55: Line 62:
  
 
=== How to make ===
 
=== How to make ===
 +
 +
Making the kernel itself:
  
 
   make uImage
 
   make uImage
 +
 +
Making the modules:
 +
 +
  make modules
 +
 +
Make the directory and deploy the modules files:
 +
 +
  make modules_install INSTALL_MOD_PATH=/tmp/MyModules
 +
 +
Now you can find the kernel (uImage) at arch/arm/boot and the modules at /tmp/MyModules.
 +
 +
[[Category:LS-XHL]]

Revision as of 13:07, 31 December 2009

Contents

How to build a custom kernel from Buffalos source

This is an ongoing task. I will report my success as a step-by-step guide to build a kernel from the GPL sources Buffalo provided here http://opensource.buffalo.jp/gpl_storage.html .

This will not be a guide for noobs having no Linux background at all, because one has to know what to do if problems arise (during compilation as well as when testing the kernel). If you do not know now what JTAG and OpenOCD is, you are a noob as meant before. ;-)

Building the kernel itself

2009.12.30: Succeeded to build the kernel using this .config http://downloads.buffalo.nas-central.org/Users/kenatonline/config.gz.

I had to edit some files, because the original source from buffalo was not error free (to be gentle).

Real errors

How could it be, that Buffalo provides sources which fail to build due to beginners bugs (missing forward declaration resp. using of a function before implementing it)? Also warnings about implicit declaration of a function should ring some bells, because it is a sign of a missing include. Please excuse that I was too lazy to solve this by determining the "correct" include statements. I used "correct" forward declarations instead.

arch/arm/kernel/process.c:

 void BuffaloChangePowerStatusBeforeHalt(void);
 void BuffaloGpio_CpuReset(void);
 void bfSetMagicKey(unsigned int key);
 unsigned int bfGetMagicKey(void);

This wrong coding is my favourite, because of missing function call brackets, which is a typical beginners bug. Due to dependency problems, I did not solve the bug, but accepted the outcome. It "just" causes no output at the serial console if the output is done via strput.

include/asm/arch/uncompress.h:

 include/asm/arch/uncompress.h:34: warning: the address of `bfIsSerialConsoleEnable', will always evaluate as `true'


Missing includes solved by correct forward declaration

Noone should ignore warnings like the ones one get compiling the Buffalo source (even not Buffalo itself). Please excuse that I was too lazy to solve this by determining the "correct" include statements. I used "correct" forward declarations instead.

driver/md/md.c:

 #ifdef CONFIG_BUFFALO_PLATFORM
 void kernevnt_RadiDegraded(int devno, int major, int minor);
 void kernevnt_RadiRecovery(int devno, int on, int isRecovery, int major, int minor);
 void kernevnt_RadiScan(int devno, int on);
 #endif

arch/arm/plat-feroceon-kw/mv_hal/buffalo/buffalocore.c:

 void egiga_buffalo_change_configuration(unsigned short mode);
 int mvBoardNameGet(char *pNameBuff);
 unsigned int mvBoardIdGet(void);

arch/arm/plat-feroceon-kw/mv_hal/buffalo/BuffaloGpio.c:

 void buffalo_link_led_off(unsigned int ethPortNum);
 void buffalo_link_led_on(unsigned int ethPortNum);

arch/arm/plat-feroceon-kw/mv_hal/buffalo/BuffaloGpioDriver.c:

 void bfSetMagicKey(unsigned int key);
 unsigned int bfGetMagicKey(void);

arch/arm/plat-feroceon-kw/mv_hal/buffalo/BuffaloUart.c:

 unsigned int mvBoardTclkGet(void);

How to make

Making the kernel itself:

 make uImage

Making the modules:

 make modules

Make the directory and deploy the modules files:

 make modules_install INSTALL_MOD_PATH=/tmp/MyModules

Now you can find the kernel (uImage) at arch/arm/boot and the modules at /tmp/MyModules.