Buffalo ARM9 Kernel Port

From NAS-Central Buffalo - The Linkstation Wiki
Revision as of 05:17, 17 January 2009 by Sluk (Talk | contribs) (How to Get GPL Build Kernel Run Under Linkstation Live Stock Environment)

Jump to: navigation, search


Stock GPL Release Kernel

Linux version 2.6.16.16-arm1 (root@I.You) (gcc version 3.4.4 (release) 
(CodeSourcery ARM 2005q3-2)) #69 Wed Oct 1 10:59:37 JST 2008

Kernel ONLY Source available at linux-2.6.16_lsp.1.7.8.tar.gz

How to Get GPL Build Kernel Run Under Linkstation Live Stock Environment

Before You Begin: 
You don't need the below patch if you don't use your custom
build kernel with the Stock environment - especially together
with the Stock initrd.buffalo. Product ID below only applicable
to Linkstation Live, no need to modify if your box is Linkstation Pro.

In the current release GPL Kernel Soruce above, Buffalo did not provide any means to setup correct Product ID for Linkstation Live in the Makefile. Without the correct Product ID in kernel, Linkstation will enter EM Mode upon reboot. We have to patch one of the source file directly in order to get the kernel work with the Stock initrd and root filesystem.

Code Modification - buffalocore.c

Change directory to top of the source tree and modify buffalo/drivers/buffalocore.c like below:

   Search and change the line 
   from:
         len += sprintf(buf+len,"PRODUCTNAME=LS-GL(IESADA)\n");
   to:
         len += sprintf(buf+len,"PRODUCTNAME=HS-DHGL(JINMU)\n");
   Search and change the line 
   from:
         len += sprintf(buf+len,"PRODUCTID=0x00000009\n");
   to
         len += sprintf(buf+len,"PRODUCTID=0x0000000A\n");

After that you can 'make menuconfig' to add/remove kernel options as usual and build the kernel.

Stock File System Modification

When you reboot the Linkstation with the new build kernel it will enter EM Mode, use acp_commander to reset root password and enable telnet access. Logon to the Linkstation and enter:

   grep BUILDDATE /proc/buffalo/firmware

Replace the above grep output line with the same line in /etc/linkstation_release and reboot. Your Linkstation should now resume to normal mode.

Mainline Kernel

About

jonli447 and lb_worm were trying to create a patch for the vanilla kernel [1] so we could use the kernel.org sources for the arm9-buffalo-boxes easily. But the guys from Marvell have done a great job in doing that so the nas-central community have stopped efforts in doing that to focus on helping with the Marvell's git. Marvell's code was merged into 2.6.25 with the latest development going into the Orion repository which has been merged into mainline.

At this time (12/21/2008) the kernel (2.6.28-rc9) supports:

  • Buffalo Terastation Pro II/Live
  • Buffalo Linkstation Pro/Live
  • Buffalo Linkstation Mini
  • Linksys WRT350N v2
  • Technologic Systems TS-78xx
  • LaCie Ethernet Disk mini V2
  • Maxtor Shared Storage II
  • Netgear WNR854T
  • Marvell Orion-VoIP GE Reference Design
  • Marvell Orion-VoIP FXO Reference Design
  • Marvell Orion-1-90 AP GE Reference Design
  • The Buffalo Linkstation Pro/Revogear Kurobox Pro support (MV88F5182)
  • The Marvell Orion-2 (MV88F5281) Development Board
  • The OrionNAS Reference Design board (MV88F5182)
  • The D-Link DNS-323 board (MV88F5181)
  • The QNAP TS109/209/409 boards (MV88F5182 & MV88F5281)
  • The HP Media Vault mv2120

Containing support for devices:

  • The NAND Flash controller
  • The SATA controller
  • The Ethernet controller
  • The USB controller
  • The PCI controller
  • The GPIO controller
  • The Serial Port controller
  • The I2C controller

XFS has had problems on arm for a long time. Two patches [2][3] have improved the situation but there is still one problem remaining [4].


The things that are not yet supported :

  • The CESA hardware engine is not yet supported (usefull for cryptographic and security operations)
  • The XOR hardware engine is not yet supported (usefull for iSCSI or RAID5 operations)
  • OABI rootfs & applications when using a 88F5281-D0 (other SoC are OK)

If you want to talk about this kernel, please do it here

Note: By using the kernels from svn/git, users are still subject to the LinkstationWiki BetaTesters ToS and Disclaimer (Not trying to scare people, just warning newbies).

Compilation & Installation Instructions

  • Install either a native or cross toolchain. Cross-compiling with the codesourcery toolchain (2007q3) is reccomended. If your cross compile machine runs Debian, or similar, you can use the cross compilation toolchain repository supplied by Emdebian. Gentoo users may use sys-devel/crossdev.
  • Download mkimage to somewhere in your path. Gentoo users may get it by emerging dev-embedded/u-boot-tools, Debian has a package named uboot-mkimage.
  • Ensure you have the devio command installed (sys-block/devio in Gentoo).
  • Obtain the kernel sources, this can either be 2.6.25 or greater from kernel.org or you can use the Orion development repository:
git clone git://git.marvell.com/orion.git
  • Change to your sources directory and create the kernel config:
make ARCH=arm orion5x_defconfig
  • Run the following command to make any changes to the config file (including any ReiserFS or JFS support):
make ARCH=arm menuconfig
  • Run
make ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- zImage
  • After kernel is finished compiling, you need to force it to use the correct mach-type for your device:
# The version number at the end of each line is the kernel version that first
# supported that device. Run only the line that corresponds to your device.
# This will set the machine type of the kernel, which cannot be autodetected.
# Last 2 characters of wl-command form the machine types. So '0631' for the Linkstation Pro.
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811031,4' # Linkstation Pro/Live (2.6.26)
devio > foo 'wl 0xe3a01c05,4' 'wl 0xe38110e5,4' # Kurobox Pro (2.6.25)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe381101d,4' # QNAP TS-109/TS-209 (2.6.25)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811041,4' # QNAP TS-409 (2.6.27?)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811006,4' # D-Link DNS-323 (2.6.25)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe381109d,4' # HP Media Vault MV2120 (2.6.27?)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811074,4' # Technologic Systems TS-78xx SBC (2.6.27?)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe38110e6,4' # Maxtor Shared Storage II (2.6.27)
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811061,4' # Linksys WRT350N v2 (2.6.27?)
devio > foo 'wl 0xe3a01c07,4' 'wl 0xe3811027,4' # Buffalo Linkstation Pro Duo (Is this right?)
devio > foo 'wl 0xe3a01c07,4' 'wl 0xe3811042,4' # Buffalo Linkstation Mini
devio > foo 'wl 0xe3a01c06,4' 'wl 0xe3811030,4' # Buffalo TS Pro V2 (not yet supported in Vanilla 2.6.26 as of Aug. 10th, 2008)
devio > foo 'wl 0xe3a01c07,4' 'wl 0xe3811065,4' # Netronix NH-233

# Run all of the following:
cat foo arch/arm/boot/zImage > zImage.new
mkimage -A arm -O linux -T kernel -C none -a 0x00008000 -e 0x00008000 -n 'linux' -d zImage.new uImage.new
rm foo zImage.new
  • The new uImage will be called uImage.new, copy this to its destination. For a Linkstation/Kuro this is the /boot/uImage.buffalo.
  • If necessary, compile modules and be sure if you are cross compiling not to set the install path to the hosts root:
make ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules
make ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=/<absolute/dir/loc/not/root/dir>
  • copy lib/ directory that is created to / of linkstation
{"cc_re__cc_re__cc_by_sa_3_0": ["t-permalink\"><a href=\"/w/index.php?title=Buffalo_ARM9_Kernel_Port&amp;oldid=26826\" title=\"Permanent link to this revision of the page\">Permanent link</a></li>\n\t\t\t\t\t\t\t\t\t\t\t<li id=\"t-info\"><a href=\"/w/index.php?title=Buffalo_ARM9_Kernel_Port&amp;action=info\">Page information</a></li>\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t</div>\n\t\t</div>\n\t\t\t</div><!-- end of the left (by default at least) column -->\n\t\t<div class=\"visualClear\"></div>\n\t\t\t\t\t<div id=\"footer\" role=\"contentinfo\">\n\t\t\t\t\t\t<div id=\"f-copyrightico\">\n\t\t\t\t\t\t\t\t\t<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"><img src=\"http://i.creativecommons.org/l/by-sa/3.0/88x31.png\" alt=\"Attribution-Share Alike 3.0 Unported\" width=\"88\" height=\"31\" /></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"f-poweredbyico\">\n\t\t\t\t\t\t\t\t\t<a href=\"//www.mediawiki.org/\"><img src=\"/w/resources/assets/poweredby_mediawiki_88x31.png\" alt=\"Powered by MediaWiki\" width=\"88\" height=\"31\" /></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t<ul id=\"f-list\">\n\t\t\t\t\t\t\t\t\t<li id=\"copyright\">Content is available under <a class=\"external\" rel=\"nofollow\" href=\"http://creativecommons.org/lic", "co\">\n\t\t\t\t\t\t\t\t\t<a href=\"http://creativecommons.org/licenses/by-sa/3.0/\"><img src=\"http://i.creativecommons.org/l/by-sa/3.0/88x31.png\" alt=\"Attribution-Share Alike 3.0 Unported\" width=\"88\" height=\"31\" /></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t<div id=\"f-poweredbyico\">\n\t\t\t\t\t\t\t\t\t<a href=\"//www.mediawiki.org/\"><img src=\"/w/resources/assets/poweredby_mediawiki_88x31.png\" alt=\"Powered by MediaWiki\" width=\"88\" height=\"31\" /></a>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t<ul id=\"f-list\">\n\t\t\t\t\t\t\t\t\t<li id=\"copyright\">Content is available under <a class=\"external\" rel=\"nofollow\" href=\"http://creativecommons.org/licenses/by-sa/3.0/\">Attribution-Share Alike 3.0 Unported</a> unless otherwise noted.</li>\n\t\t\t\t\t\t\t\t\t<li id=\"privacy\"><a href=\"/wiki/Http://www.nas-central.org/privacy-policy\" title=\"Http://www.nas-central.org/privacy-policy\">Privacy policy</a></li>\n\t\t\t\t\t\t\t\t\t<li id=\"about\"><a href=\"/wiki/NAS-Central_Buffalo_-_The_Linkstation_Wiki:About\" title=\"NAS-Central Buffalo - The Linkstation Wiki:About\">About NAS-Central Buffalo - The Linkstation Wiki</a></li>\n\t\t\t\t\t\t\t\t\t<li id=\"disclaimer\"><a href=\"http://www.nas-central.org/ind"], "copyright__copyright__copyright": ["", "mage.new, copy this to its destination. For a Linkstation/Kuro this is the /boot/uImage.buffalo.\n  \u2022 If necessary, compile modules and be sure if you are cross compiling not to set the install path to the hosts root:\nmake ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules\nmake ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=/<absolute/dir/loc/not/root/dir>\n  \u2022 copy lib/ directory that is created to / of linkstation", "mage.new, copy this to its destination. For a Linkstation/Kuro this is the /boot/uImage.buffalo.\n  \u2022 If necessary, compile modules and be sure if you are cross compiling not to set the install path to the hosts root:\nmake ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules\nmake ARCH=arm CROSS_COMPILE=/path/to/toolchain/bin/arm-none-linux-gnueabi- modules_install INSTALL_MOD_PATH=/<absolute/dir/loc/not/root/dir>\n  \u2022 copy lib/ directory that is created to / of linkstation"]}