ProLiant Servers (ML,DL,SL)
cancel
Showing results for 
Search instead for 
Did you mean: 

Firmware update on Linux

SOLVED
Go to solution
AnotherKarl
Occasional Advisor

Firmware update on Linux

I am trying to update the firmware on my ML10 Gen9. It is running Arch Linux, fully updated.

I downloaded the firmware package from the HPe website, did the sha256sum check which matched.

The instructions are wrong and make no sense, but luckily its no rocket science. I run the script as root. It dumps the following blurp. I checked the script all it does is chmod 777 on the executable and run it with some parameters. I tried running it manually and tried /h or --help. it allways outputs this blurp:

/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:42:1: warning: data definition has no type or storage class
 module_init(amifldrv_init_module);
 ^~~~~~~~~~~
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:42:1: error: type defaults to ‘int’ in declaration of ‘module_init’ [-Werror=implicit-int]
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:42:1: warning: parameter names (without types) in function declaration
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:43:1: warning: data definition has no type or storage class
 module_exit(amifldrv_cleanup_module);
 ^~~~~~~~~~~
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:43:1: error: type defaults to ‘int’ in declaration of ‘module_exit’ [-Werror=implicit-int]
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:43:1: warning: parameter names (without types) in function declaration
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:22:13: warning: ‘amifldrv_cleanup_module’ defined but not used [-Wunused-function]
 static void amifldrv_cleanup_module(void)
             ^~~~~~~~~~~~~~~~~~~~~~~
/data/software/Linuxflash_with_BATCH/.temp/amifldrv.c:14:12: warning: ‘amifldrv_init_module’ defined but not used [-Wunused-function]
 static int amifldrv_init_module(void)
            ^~~~~~~~~~~~~~~~~~~~
cc1: some warnings being treated as errors
make[2]: *** [scripts/Makefile.build:315: /data/software/Linuxflash_with_BATCH/.temp/amifldrv.o] Error 1
make[1]: *** [Makefile:1504: _module_/data/software/Linuxflash_with_BATCH/.temp] Error 2
make: *** [Makefile:8: default] Error 2
10 - Error: Unable to load driver.

 

Can anyone help me make sense of this so i can upgrade to the latest firmware please?

 

Thanks!

11 REPLIES
Highlighted
Jimmy Vance
HPE Pro

Re: Firmware update on Linux

What firmware package did you download?




__________________________________________________
No support by private messages. Please ask the forum!      I work for HPE

If you feel this was helpful please click the KUDOS! thumb below!   
AnotherKarl
Occasional Advisor

Re: Firmware update on Linux


Jimmy Vance wrote:

What firmware package did you download?


Type: BIOS (Entitlement Required) - System ROM
Version: 2017.10.11(17 Oct 2017)
Operating System(s): SUSE Linux Enterprise Server 11 (AMD64/EM64T) | View all
File name: ML10_Gen9_BIOS_1.08_Linux.zip (6.9 MB)  

 The link is (not sure if it will work):
https://support.hpe.com/hpsc/swd/public/detail?sp4ts.oid=1008772172&swItemId=MTX_56be354e585240da8670fce45e&swEnvOid=4184#tab-history

Entitlement is required to download it.

Why can't they release something that is guaranteed to work like a bootable image? This package is full of errors, the steps are full of errors. How hard can it be to just have a stand alone, working executable that reads a binary BIOS image file and flashes the firmware?

Thanks for the help though. I really hope we can get this to work.

Jimmy Vance
HPE Pro

Re: Firmware update on Linux

I don't have access to an ML10 Gen9 here, but I asked a co-worker to test on one they have.  They used the newest release v1.10 but the flash engine is the same for both versions as far as I can tell.

ML10 Gen9, OS is RedHat Enterprise Linux 7.2  64bit

Here are the steps they used.

  1. Download the zip file to a directory on a target server.
  2. Unzip to a temporary directory.  (/root/tmp/)
  3. Open " Linuxflash_with_BATCH " folder and 5 files and one directory will be displayed.
    • ROM_Flash_Utility (direcotry)
    • Linuxflash.sh.swp
    • 1.10
    • Linuxflash.sh
    • readme.txt
    • release_note.txt
      (Note: Use flash utility on Linux 64bit kernel 2.6.x or above)
  4. Open terminal and type the following:
        "cd /root/tmp/Linuxflash_with_BATCH/ROM_Flash_Utility"
  5. Type the following:
        "chmod -R 777 Linuxflash.sh"
  6. Type the following:
        "./Linuxflash.sh"
  7. When Flash process is completed it will automatically direct back to the command line
  8. Restart system when flash complete
  9. After system restarts, verify that the ROM version is 1.10. The BIOS version displays in the BIOS setup

They had no issue running the shell script and the flash completed successfully. 

 

If you run the flash engine without any parameters, the following is returned

[root@ml10gen9 Linuxflash_with_BATCH]# ROM_Flash_Utility/afulnx64/afulnx_64
+---------------------------------------------------------------------------+
|                 AMI Firmware Update Utility  v5.07.01                     |
|      Copyright (C)2014 American Megatrends Inc. All Rights Reserved.      |
+---------------------------------------------------------------------------+
| Usage: afulnx_64 <ROM File Name> [Option 1] [Option 2]...                 |
|           or                                                              |
|        afulnx_64 <Input or Output File Name> <Command>                    |
|           or                                                              |
|        afulnx_64 <Command>                                                |
| ------------------------------------------------------------------------- |
| Commands:                                                                 |
|         /O - Save current ROM image to file                               |
|         /U - Display ROM File's ROMID                                     |
|         /S - Refer to Options: /S                                         |
|         /D - Verification test of given ROM File without flashing BIOS.   |
|         /A - Refer to Options: /A                                         |
|       /OAD - Refer to Options: /OAD                                       |
| /CLNEVNLOG - Refer to Options: /CLNEVNLOG                                 |
| Options:                                                                  |
|      /CMD: - Send special command to BIOS. /CMD:{xxx}           |
|     /MEUL: - Program ME Entire Firmware Block, which supports             |
|              Production.BIN and PreProduction.BIN files.                  |
|         /Q - Silent execution                                             |
|         /X - Don't Check ROM ID                                           |
|       /CAF - Compare ROM file's data with Systems is different or         |
|              not, if not then cancel related update.                      |
|         /S - Display current system's ROMID                               |
|       /JBC - Don't Check AC adapter and battery                           |
|  /HOLEOUT: - Save specific ROM Hole according to RomHole GUID.            |
|              NewRomHole1.BIN /HOLEOUT:GUID                                |
|        /SP - Preserve Setup setting.                                      |
|         /R - Preserve ALL SMBIOS structure during programming             |
|        /Rn - Preserve SMBIOS type N during programming(n=0-255)           |
|         /B - Program Boot Block                                           |
|         /P - Program Main BIOS                                            |
|         /N - Program NVRAM                                                |
|         /K - Program all non-critical blocks.                             |
|        /Kn - Program n'th non-critical block(n=0-15).                     |
|     /HOLE: - Update specific ROM Hole according to RomHole GUID.          |
|              NewRomHole1.BIN /HOLE:GUID                                   |
|         /L - Program all ROM Holes.                                       |
|        /Ln - Program n'th ROM Hole only(n=0-15).                          |
|      /ECUF - Update EC BIOS when newer version is detected.               |
|         /E - Program Embedded Controller Block                            |
|        /ME - Program ME Entire Firmware Block.                            |
|       /DSC - Flash DSC.                                                   |
|       /GBE - Flash GBE.                                                   |
|        /ME - Flash ME.                                                    |
|      /MEUF - Program ME Ignition Firmware Block.                          |
|         /A - Oem Activation file                                          |
|       /OAD - Delete Oem Activation key                                    |
| /CLNEVNLOG - Clear Event Log.                                             |
|   /CAPSULE - Override Secure Flash policy to Capsule                      |
|  /RECOVERY - Override Secure Flash policy to Recovery                     |
|        /EC - Program Embedded Controller Block. (Flash Type)              |
|    /REBOOT - Reboot after programming.                                    |
|  /SHUTDOWN - Shutdown after programming.                                  |
+---------------------------------------------------------------------------+
[root@ml10gen9 Linuxflash_with_BATCH]#

 

 




__________________________________________________
No support by private messages. Please ask the forum!      I work for HPE

If you feel this was helpful please click the KUDOS! thumb below!   
AnotherKarl
Occasional Advisor

Re: Firmware update on Linux

Thanks again! Really appreciate your efforts to help. You are awesome :).

Basically, those are the steps I followed as well, but resulted in those errors. I am creating a CentOS 7.2 image to boot my server with and I'll try again.

 I'll let you know how that works.

Edit: A little feedback on the instructions:
Linuxflash.sh file is in the "Linuxflash_with_BATCH" dir, not in the "ROM_Flash_Utility" dir. So, the cd and chmod commands when followed literally, will result in an error message:

chmod: cannot access 'Linuxflash.sh': No such file or directory

 The command chmod needs to be given in "/root/tmp/Linuxflash_with_BATCH" because that's where that file resides.

Last but not least, chmod -R means recursive. Using recursive on a single file is useless. The notation '777' opens up the permissions and makes the file executable to the entire world (including guest/unauthenticated access). This is really bad practise. I see this same command is also used in the script on the binary flash executable. The command we want is simply:

 

  • chmod 750 Linuxflash.sh

This sets read/write permissions for 'root', and the file executable bit for the owner and group. Since the group permissions in the root home dir is 'root' as well this limits access and execute to root only. The script should also contain that command instead of '777' which should never ever be used, unless there really, really really is no other way. And even then you should think twice about it and reconsider.

 

AnotherKarl
Occasional Advisor

Re: Firmware update on Linux

It still doesn't work.

Installed Centos 7.2, server with GUI and backward compatibility libraries on an external disk and booted the server. Copied the zipfile, extracted it and chmod that file.

It said it coulnd't find sources, unable to load driver. Apparently it wants to compile something.

I installed the "Development Tools" group, it contains kernel headers, sources, and all tools for compiling.

Rebooted, tried again, it says the same thing.

Why it wants to compile something is beyond me. It should simply flash the BIOS, how hard can that be?

AnotherKarl
Occasional Advisor

Re: Firmware update on Linux

Can I flash this BIOS from Windows?

 

I can install Windows 7 on the external disk and boot from that instead?

Jimmy Vance
HPE Pro

Re: Firmware update on Linux

I just tried running the utltiy on a non ML10 and am also seeng an error as it can't find the kernel source.  I just did a minimal installation of CentOS 7.2. I'm not sure what all packaegs were installed on the co-workers system for the utility to work.  You are correct on the instructions needeing work.  I'll assume we get his package directly from AMI, but I will report this issues to the program team for this product.

I would assume there is a Windows tool to flash the BIOS, search for v1.10 as it was just released this month

 

 




__________________________________________________
No support by private messages. Please ask the forum!      I work for HPE

If you feel this was helpful please click the KUDOS! thumb below!   
AnotherKarl
Occasional Advisor

Re: Firmware update on Linux

Thanks for your help.

I wasn't being very clear, apologies.

I meant to ask if I can flash the 1.10 BIOS from this Linux download with the Windows flash tool. I can download the Windows version from the site but I get the impression the Linux version of the BIOS is specfically for systems running Linux (not just the tool to flash it), implying it is not OS agnostic.

I am used to a BIOS/Firmware being OS agnostic, but the description leads me to believe otherwise. That's what I meant to ask.

I went through the trouble to get Windows 10 running on a new disk. After instalaltion, the screen goes black and my monitor says input 1920x1200x60hz out of range. The monitor is a Dell Ultrasharp 2410, with a native resolution of 1920x1200 60Hz (also supporting 50 and 59Hz). During the install it had a lower resolution. After reboot, it won't even give me a display in safe mode or low resolution. I've had this monitor as my main monitor for like 10 years. Never had a single problem, ever. It's been the best and my favorite monitor for a long time.

I added a low budget AMD Radeon card, which also refuses to output an image (not even BIOS becomes visible) with HDMI and DVI and VGA outputs. In the BIOS I have scan for external card enabled.

I've got all sorts of cables for HDMI, DVI and DP and converters from one to the other. What I don't have anymore is a simple VGA cable.

I'm sure you can understand I'm getting a little frustrated with HPe and this hardware. Updating a firmware should be a 1 minute job.

I've just ordered a simple VGA cable ... hopefully that will work.

Jimmy Vance
HPE Pro

Re: Firmware update on Linux

Sorry I don't have a better answer for you, and can understand your frustration.  I'm just not that familiar with this system. as it does not use the normal ProLiant tools as the system ROM is AMI and not HPE.

I was able to log into the system my co-worker was using and grab a copy of the anaconda file created during installation, here is the package list. Our time zones are very different so I can't get quick responses to my questions.

repo --name="Server-HighAvailability" --baseurl=file:///run/install/repo/addons/HighAvailability
repo --name="Server-ResilientStorage" --baseurl=file:///run/install/repo/addons/ResilientStorage

%packages
@^graphical-server-environment
@base
@Core
@desktop-debugging
@DEVELOPMENT
@dial-up
@fonts
@GNOME-desktop
@guest-agents
@guest-desktop-agents
@input-methods
@Internet-browser
@Multimedia
@print-client
@x11
kexec-tools




__________________________________________________
No support by private messages. Please ask the forum!      I work for HPE

If you feel this was helpful please click the KUDOS! thumb below!   
ender1
Occasional Visitor

Re: Firmware update on Linux

I have the same problem on Gentoo - afulnx_64 is written extremely badly, and doesn't work on recent kernels. What's happening is that the flasher extracts some source code, and tries to compile a kernel module, which fails due to changed functions. To make this stupider, the flasher deletes the source files before it exits, so it's not even that simple to work around the problem (there's a command-line parameter that's supposed to extract those sources, but that also tries to compile part of the module, which still fails).

I managed to get the update to run for previous BIOS release (by running cp in a loop until I got all the sources afulnx_64 extracts, fixing them until they compiled, and loading the module manually), but the new release changed something and doesn't like the old module, and I'm not in the mood to fix those sources again. HPE should provide an UEFI flash utility, that'd be less of a PITA than afulnx_64.

AnotherKarl
Occasional Advisor
Solution

Re: Firmware update on Linux

Oke I finally managed after many hours of frustration.

I disconnected all internal drives and installed Windows 10 on an old SSD I had lying around. After installation and final reboot, the monitor would go blank. I could get into safe mode but 7 out 10 times, the F8 keypress would be ignored. This took me a million reboots. The firmware flash doesn't work from Safe mode so I had to get the display issue fixed first. The monitor had an exclamation mark. I couldn't get it to work. I tried to get the monitor to work to no avail. I ended up right clicking the video driver and uninstall it, deleting the files as well (so it wouldn't reinstall after a reboot). This finally gave me a working display  and I was able to flash the firmware from Windows.

The new firmware definitely improves working with a PCIe videocard. Previously, I had no POST display and a blank screen until the OS was booted and initialized video output. This is working now and I can disable the internal GFX.

HPe really needs to supply a proper firmware flash package. Many firmwares allow flashing from within the firmware itself from a USB thumb drive.

Thanks again for the help Jimmy!