Unofficial Asus A7V and Linux ATA100 Quasi-Mini-Howto


by Aaron Cline


last updated 01.27.2001


Per la versione in italiano (trad. a cura di Antonluigi Federico), cliccare qui.




  1. Introduction

  2. Installing and Booting Linux on Your Promise ATA 100 Controller
    1. Finding your Promise I/O
    2. Installing and Booting

  3. Running Linux at Full ATA 100 Speed
  4. Mandrake
  5. SuSE
  6. Debian
  7. Thanks


1. Introduction

Welcome, I would call this a HOWTO, but I've never written one before and so I don't know if it qualifies. I recently bought a new system with an A7V motherboard and for a while I couldn't figure out how to boot and load Linux off of the Promise ATA 100 onboard controller. I also couldn't find any good help and believe me, I tried. Finally, after reading through multiple newsgroups and many posts I was able to piece together a course of action. In time I was successful and I intent to show you how you can be too. Now, this is just what I did, so your mileage may vary.

First, let me introduce you to my hardware.

  • AMD TB 900
  • 128 PC133
  • IBM DTL305020
  • Elsa Gladiac GeForce2
  • SBLive Value
  • Network Card
  • 300 W Power Supply (very important)
  • DVD Drive
  • CD-RW

Second, I am using RedHat 6.2 and I already have a Win95 partition on the drive (not that it really matters). I have the DVD and the CD-RW on the regular ATA-66 controller. I have read some newsgroup posts saying that it is better to set it up this way.

2. Installing and Booting Linux on Your Promise ATA 100 Controller


2a. Finding Your Promise I/O

Installing Linux to your ATA 100 is really a fairly simple two part process. The first thing you need to do is find out what I/O address your Promise IDE Controller operates at. To start, boot from your linux CD or Bootdisk. The first screen you see has

Welcome to Red Hat Linux 6.2!
at the top as asks you whether you would like to perform a graphical, text, or expert install. Hit enter and continue into the graphical install. At the first graphical install screen press Ctrl-Alt-F2 to get to a command prompt. You should see a command prompt that looks like the following. If not, press Alt-F4, or Alt-F3, or Alt-F1 until you find it.
bash#
Now, you need to look at the /proc/pci file. Do a "cat /proc/pci | less" and look for some information about a Promise Controller. Somewhere in the output you should see something similar to:
 Bus  0, device  17, function  0:
    Unknown mass storage controller: Promise Technology Unknown device (rev 2).
      Vendor id=105a. Device id=d30.
      Medium devsel.  IRQ 10.  Master Capable.  Latency=32.  
 (A)  I/O at 0x9400 [0x9401].
 (B)  I/O at 0x9000 [0x9001].
 (C)  I/O at 0x8800 [0x8801].
 (D)  I/O at 0x8400 [0x8401].
      I/O at 0x8000 [0x8001].
      Non-prefetchable 32 bit memory at 0xd5800000 [0xd5800000].


Please note the the letters A, B, C, and D are only for reference. These 4 lines contain the I/O addresses that you will need to make the installation "see" your Promise ATA100 controller. These are the numbers that I have in my /proc/pci. I assume that if you have an Asus A7V with BIOS 1003 that you may have the same numbers. If so you can use this command:
ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
If not, I will show you how to derive the LILO command that is right for you.

The format for this ide command is easy and listed below.

ide2=A, B+2 ide3=C, D+2
When referencing the variables look at the example. On line A you see the I/O address of 0x9400 (disregard the addresses in the brackets). You plug that into the equation above. Then you grab the line B address and add 2 and so on until you have all 4 variables done. Write this command down because you will need it when you reboot.

2b. Installing and Booting Linux

Now that you have written down this information, you need to reboot from the CD or Bootdisk again. When you get to the initial screen

Welcome to Red Hat Linux 6.2!
type your ide commmand at the boot prompt like so:
boot: text ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
I have found that the graphical mode does not seem to work very well. I can only assume that it uses a differently configured kernel or something. If you want to try graphical mode you can access it by typing:
boot: vmlinuz ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
But do not complain to me if it doesn't work. I only sanction the text mode. :)

This should allow you to continue on with RedHat setup and now it should find any HDD on the ATA 100 controller. You should have no problem installing linux. It is important that you make a bootdisk if you have an Athlon or Duron processor. I'll explain why in a bit. Also, I went ahead and installed Lilo in the MBR and didn't have any problems.

It is important to remember that you will always have to pass your ide command at the LILO prompt unless you add the "append" command to your lilo.conf. When you do your lilo.conf should look like this:


image=/boot/vmlinuz-2.2.14-5.0
	label=linux
	read-only
	root=/dev/hde9
	append="ide2=0x9400, 0x9002 ide3=0x8800, 0x8402"


And as always, whenever you modify your lilo.conf file be sure to run /sbin/lilo as root to reinstall lilo or you may not be able to reboot.

If in fact you do have an Athlon or Duron processor and are using RedHat 6.2, you may not successfully reboot. An error will be given regarding a CPUID Serial Number. This stumped me for awhile before I found the answer. To get around this error this I had to boot from the previous made bootdisk. I then had to pass the following commands to the kernel at the LILO prompt:

linux x86_serial_nr=1 ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
The "x86_serial_nr=1" tells the kernel not to look for the CPUID. This should get you to the login prompt, if it does not then you have made and error somewhere or I have steered you wrong (which is more than entirely possible:). If you have an Athlon or Duron then you must create a new kernel that does not look for a CPUID or you will have to use this bootdisk method to boot until you do.

3. Running Linux at Full ATA 100 Speed

I have currently been able to get the 2.4-test10 kernel working well with RedHat 6.2. This new kernel has a Promise driver that I have built into the kernel. This is part of my kernel config.

#
# IDE, ATA and ATAPI Block devices
#
CONFIG_BLK_DEV_IDE=y
CONFIG_BLK_DEV_IDEDISK=y
CONFIG_BLK_DEV_IDECD=y
CONFIG_BLK_DEV_IDEFLOPPY=y
CONFIG_BLK_DEV_IDESCSI=m
CONFIG_BLK_DEV_IDEPCI=y
CONFIG_IDEPCI_SHARE_IRQ=y
CONFIG_BLK_DEV_IDEDMA_PCI=y
CONFIG_IDEDMA_PCI_AUTO=y
CONFIG_BLK_DEV_IDEDMA=y
CONFIG_IDEDMA_PCI_WIP=y
CONFIG_BLK_DEV_PDC202XX=y
CONFIG_BLK_DEV_VIA82CXXX=y
CONFIG_IDEDMA_AUTO=y
CONFIG_IDEDMA_IVB=y
CONFIG_BLK_DEV_IDE_MODES=y

It is important to note that in order to use a 2.4 kernel you must install some new packages. Read ~/Documentation/Changes for the full details. An excerpt follows.

o  Gnu C                  2.91.66                 # gcc --version
o  Gnu make               3.77                    # make --version
o  binutils               2.9.1.0.25              # ld -v
o  util-linux             2.10o                   # kbdrate -v
o  modutils               2.3.18                  # insmod -V
o  e2fsprogs              1.19                    # tune2fs --version
o  pcmcia-cs              3.1.21                  # cardmgr -V
o  PPP                    2.4.0                   # pppd --version
o  isdn4k-utils           3.1beta7                # isdnctrl 2>&1|grep version

This kernel should boot without the ide commands being passed to it. It should also recognize that your HD is running in UDMA5 or UDMA4 mode. I have found a pretty good Hard Drive benchmarking page here. (http://www.linuxhelp.net/guides/davion/hdtweak.phtml)

You will also want to grab the latest hdparm utility here. (http://www.linux-ide.org)

4. Hard Drive Benchmarks

So you may be asking, "Is this all worth it? What kind of performance am I gaining here?". Well, I asked myself pretty much the same question. So I went out to Freshmeat.net and found a little program call Bonnie++ that tests your hard drive pretty thoroughly, or at least I think it does. You can find Bonnie++ here. (http://www.coker.com.au/bonnie++/).

I used the stock 2.4 kernel from www.kernel.org and the 2.2.14-5.0 kernel that comes with RedHat 6.2 for my testing. I'll show you the raw numbers and then try to explain them if I can.

2.4

Version 1.00g       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
eros           392M  8718  96 31940  15  6951   5  7407  78 19006   7 159.0   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16   853  99 +++++ +++ 19816  99   852  99 +++++ +++  3959 100
2.2.14

Version 1.00g       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
eros           392M  3526  94  5604  67  2254  52  3002  94  4554  90 127.4   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16   772  99  2089  99 16842 100   894  97 28430  98  3566 100
As far as I can understand there are 12 tests. Each one measures two variables. The first variable is amount of work done and the higher value is better. The second value is time taken from the processor and the lower the value the better.

In almost all of the areas you see significant gains, sometimes even close to 500%. To me, this makes all of the trouble worth it.

5. Mandrake

I have received an email from Michael Monsen stating that he has succeeded in using this method with Mandrake 7.2. He did add that it seemed that the kernel would lock when trying to bring up the USB interface. He has put up a page (http://www.themonsens.org/michaelfamily/a7v_and_mandrake_7.2) to describe his process for you Mandrake users.

Antonluigi has written in that he was able to get Mandrake 7.0 to boot using the Red Hat procedure above.

6. Debian

TOSKO has written in regarding running the Debian Potato 2.2 and 2.2 Rev2 on the Asus A7V. He said that you get the addresses the same. When you boot into the install use this command:

linux ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
instead of the 'text' command.

Near the finish when it asks you about the LILO installation you will see something like this.

1) /dev/hda
2)/dev/paritions_where_linux_has_benn_installed
3)floppy disk
He says that option 2 will not work. 3 will work but you'll always have to boot from disk. You want to chose 1, but before you do that you need to note that /dev/hda is not where your HDD is. He says that to fix this you should immediately open a terminal and make a symbolic link from hda to hde like so:
rm /dev/hda
ln -s /dev/hde /dev/hda
Then you must also choose the option "Kernel Loader Options" and put the ide statements in it.
ide2=0x9400, 0x9002 ide3=0x8800, 0x8402
He says that after this your will have no problem booting.

7. SuSE

Antonluigi Federico has informed me that SuSE 6.4 will install using the above commands. However, 7.0 fails with a Partition Check.

8. Thanks

Please email me if you have any suggestions, comments, or successes. acline@rimvisions.com

Thanks to those who have read it and thanks to the UDMA-Howto for showing me the ide command.

Thanks to Govardhanen Gopal for his suggestions regarding readability.

Thanks to Antonluigi Federico for traslating this into Italian.

Thanks to Michael Monsen for his information regarding Mandrake 7.2.

Thanks to the man named TOSKO for the Debian Potato info.