Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

The place to discuss linux version of MakeMKV
Post Reply
rjflory
Posts: 6
Joined: Tue Jan 06, 2026 3:56 pm

Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by rjflory »

Linux commands to downgrade Hitachi/LG slimline BU40N UHD Blue-Ray drive to firmware version 1.3 so makemkv can access it.

I'm posting these instructions and paste-able command snippets because other postings I've seen skip too many key steps, and some of the files are hard to find or have quirks that might cause trouble for non-Linux-experts.
  • 1. Recent versions of makemkv seem to be unable to perform the downgrade process so an older version must be downloaded and temporarily used instead of your main makemkv install.
    2. There is no need to alter your current makemkv installation or compile anything- all of this can be done in an isolated directory from normal user-space without root access or sudo.
    3. Below assumes the host system is 64bit x86 Linux of some flavor (I use Fedora). ARM and 32bit-x86 are also supported by makemkvcon- alter the commands to fit your arch.
    4. Below assumes the first optical drive is the BU40N, otherwise use /dev/sr1 , /dev/sr2 etc.
    5. All necessary files are downloaded with wget into a 'scratch' directory to simplify the process and reduce clutter- no need for separate 'browser downloads'.
    6. I prefer to soft-link long/convoluted paths to simple names in the current dir. This makes the final command short(er), human-readable, and human-typeable.
    7. Below is NOT intended to be run as a script stand-alone. It would be prudent to paste these command-snippets in the short groups provided below and ensure each is successful before proceeding to the next group.
    8. If any of the below steps report an error, do NOT execute the final command- you do NOT want to 'brick' your drive.
    9. For those with multiple drives, update the -d device-spec and paste just the last 'makemkvcon' line into your shell.
    10. The makemkv-bin tarball was erroneously double-compressed, (discussed here: viewtopic.php?p=154789&sid=c2746b952148 ... 54#p154789 ), so extraction requires an extra, unconventional step.
    11. There are surely alternate methods to perform most of these actions- I tried to not get too fancy, but you may have a more elegant idea...

Code: Select all

# create a scratch directory somewhere writeable to the normal user and cd into it.
mkdir fw1.3 && cd fw1.3 && mkdir scratch

# download v1.17.7 of makemkvcon binary archive 
wget -P scratch https://makemkv.com/download/old/makemkv-bin-1.17.7.tar.gz
# the archive is compressed unconventionally, so must extract unconventionally
gunzip -c scratch/makemkv-bin-1.17.7.tar.gz | tar -xz -C scratch

# make softlink to 64bit binary so final commandline isn't a mile wide...
ln -svf scratch/makemkv-bin-1.17.7/bin/amd64/makemkvcon  .
# makemkvcon is not executable- fix that...
chmod u+x makemkvcon


# download sdf.bin
wget http://www.makemkv.com/svq/sdf.bin


# download the "everything firmware pack" .zip archive
wget -P scratch https://github.com/nxyzo/Flashing-Verbatim-43888-BU40N-to-1.03MK/raw/refs/heads/main/The%20all%20you%20need%20firmware%20pack.zip
unzip -d scratch -q scratch/The\ all\ you\ need\ firmware\ pack.zip

# make softlink to BU40N firmware file so final commandline isn't a mile wide and cluttered with escaped spaces, slashes, and dashes...
ln -svf scratch/The\ all\ you\ need\ firmware\ pack/LG\ slim\ BU40N/HL-DT-ST-BD-RE_BU40N-1.03-NM00000-211810241934.bin BU40N.bin


# Now downgrade the BU40N firmware to version 1.03
./makemkvcon f -d /dev/sr0 -f sdf.bin rawflash enc -i BU40N.bin


I'll update this post with suggestions or corrections.


- - - - - - - - - - - - - - - - - - - - - -

Other Useful Information/Links:

Ultimate UHD Drives Flashing Guide Updated 202x
viewtopic.php?p=129246

Flashing LG BU40N Drive to Firmware 1.03 - User Guide
https://github.com/nxyzo/Flashing-Verba ... /tree/main ( Windoze based- has typos )
Last edited by rjflory on Fri Jan 16, 2026 5:13 pm, edited 18 times in total.
flojo
Posts: 323
Joined: Thu Jun 22, 2023 4:27 am
Location: El Paso

Re: Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by flojo »

glob and line continuation

*BU40N.bin

Code: Select all

./makemkvcon f \
            -d /dev/sr0 \
            -f sdf.bin \
            rawflash enc \
            -i *BU40N.bin
rjflory
Posts: 6
Joined: Tue Jan 06, 2026 3:56 pm

Re: Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by rjflory »

I agree with globbing (or just plain shortening) the drive firmware filename. I originally used the "slim_" prefix because I thought there were both slimline and full-height versions of this drive, but after looking around awhile, that doesn't appear to be the case (they're all slim). I'm uneasy about wildcarding this arg in case of unforeseen situations where multiple filenames could match- this would be bad and potentially damaging. I prefer to protect dummies (like myself sometimes) from themselves.

I'm not convinced about breaking up the makemkvcon commandline into separate fields with line-continuation. This might cause confusion or problems for newbies, or those using a really weird shell. I remain open-minded- what was your line of thinking on this? After a quick search, it seems these makemkvcon args are not documented...
flojo
Posts: 323
Joined: Thu Jun 22, 2023 4:27 am
Location: El Paso

Re: Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by flojo »

My thoughts are that I'm not sure what "weird shit" you're talking about but I suggest using the common practices of a shell. Also use double quotes ("") and put a she-bang up top so people understand which shell these commands are supposed to work in. Also since the entire thing hinges on downloads, you should make that the 1st dependency.

The user almost always just wants it to work, a 1-off, so I'd supply them a script and put some comments in it in case they care to understand.

https://www.makemkv.com/developers/usage.txt

Here's my take, but I didn't test the flashing.

Code: Select all

#!/bin/bash

# Default variable values to set when no arguments are passed to this script.
makemkv_ver="makemkv-bin-1.17.7.tar.gz"
drive="/dev/sr0"

# If 2 arguments were passed to the script, check the arguments.
# eg. command would look like ./this.sh "/dev/sr1" "makemkv-bin-1.17.7.tar.gz"
if [ $# -eq 2 ]; then
    # If "a" = "a" that means that $2 was empty/nothing.
    if [ ! "a$2" = "a" ]; then
      makemkv_ver="$2"
    else
      >&2 echo "makemkv version was empty"
      # If /dev/null can silence the return error, we're likely sourcing.
      # Sourcing is when this script is called by another script, which when
      # that happens return values are valid. But if this script is NOT being
      # sourced then return is invalid and causes a error upon which the "||"
      # will kick in and use exit. There is ways to use just exit, this is
      # just to demonstrate the "&&" and "||".
      # The "&&" kicks in when it's true, or in other words successful.
      # Illustration: (IF IM TRUE) && I DO THIS || ELSE IF IM FALSE I DO THIS
      (return 0 2>/dev/null) && return 0 || exit 0
    fi
fi
# If 1 or 2 arguments are passed to the script, check the 1st argument only.
# Works with the 2 arguments check above, but also with just 1.
# eg. command with 1 argument would look like ./this.sh "/dev/sr1"
if [ $# -eq 1 ] || [ $# -eq 2 ]; then
  if [ ! "a$1" = "a" ]; then
    drive="$1"
  else
    >&2 echo "drive argument was empty"
    (return 0 2>/dev/null) && return 0 || exit 0
  fi
fi

function get_architecture() {
  # uname -m will get the CPU architectur name. This name varies
  # from CPU to CPU and sometimes even different names for the same CPU.
  case $(uname -m) in
      # uname will give us a name and it will drop in here. if there is a match
      # to one of the labels it will be caught by the label and that particular
      # echo command will happen.
      i386)    echo "i386"  ;;
      x86_64)  echo "amd64" ;;
      x64)     echo "amd64" ;;
      amd64)   echo "amd64" ;;
      arm64)   echo "arm64" ;;
      aarch64) echo "arm64" ;;
      armhf)   echo "armhf" ;;
      armv7l)  echo "armhf" ;;
      arm)     echo "armhf" ;;
      *) echo "Could not determine CPU architecture, exiting."; \
                                (return 0 2>/dev/null) && return 0 || exit 0 ;;
  esac
}

# Capture the function's echo output.
architecture="$(get_architecture)"

# Hinge the hole thing up to all successes of all downloads and extractions.
# Each "&&" requires success, or a exit code of 0 from each program.
wget -P "./scratch" "https://makemkv.com/download/old/$makemkv_ver" \
&& tar -xvzf "./scratch/$makemkv_ver" --overwrite -C "./scratch" \
&& chmod u+x "./scratch/makemkv-bin"*"/bin/$architecture/makemkvcon" \
&& wget -P "./scratch" "http://www.makemkv.com/svq/sdf.bin" \
&& wget -P "./scratch" "https://github.com/nxyzo/Flashing-Verbatim-43888-BU40N-to-1.03MK/raw/refs/heads/main/The all you need firmware pack.zip" \
&& unzip -d scratch -qo "./scratch/The all you need firmware pack.zip" \
&& {
  # On all successes you're inside of these braces {} (they're called braces)
  echo "Flashing: "./scratch/*pack/*BU40N/*.bin
  "./scratch/makemkv-bin"*"/bin/$architecture/makemkvcon" f \
                                            -d "$drive" \
                                            -f sdf.bin \
                                            rawflash enc \
                                            -i ./scratch/*pack/*BU40N/*.bin
  # $? holds the return code of the last program we just ran but it is
  # overwritten everytime a program is ran, so it needs to be immediately
  # assigned to a variable if we want to use the return code value in the future.
  rc=$?
  (return 0 2>/dev/null) && return $rc || exit $rc
} || {
  # On failure the "OR" eg. "||" kicks in and you're then inside of these { }
  echo "Failed to download, unzip and flash required files."
  (return 0 2>/dev/null) && return 0 || exit 0
}
rjflory
Posts: 6
Joined: Tue Jan 06, 2026 3:56 pm

Re: Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by rjflory »

I remain open to technical suggestions and corrections, but this exchange seems to render down to minimalist vs. overindulgent philosophy.

By all means use the form you like on your own system(s), but I prefer to share small, instructional fragments that may be safely run independently, in a "dry-run" manner where the intermediate results may be verified for saneness instead of a fully-automatic black-box script that makes too many assumptions. Consider, what might happen if the firmware pack .zip was updated to contain additional firmware images for the BU40N ?

I encourage you to continue learning more [ sh bash dash csh ksh zsh ... ] scripting techniques and suggest reducing the input-conditioning portion of the script to just 2..3 lines by using default-variable assignment ${var:-default} and concisely testing for emptiness with [ -z "$var" ] or non-emptyness with [ -n "$var" ] . Also, the "makemkv_ver" could simply hold the "1.17.7" version-portion of the filename instead of the entire archive filename. The substitution would look like this: archive="makemkv-bin-${makemkv_ver}.tar.gz" . I would break-up the monolithic file-retrieval and extraction block into smaller pieces that may be independently debugged when a problem with one or more repos occurs.

<rant> I will mention one pet-peave I see too often by novices- the redundant use of the "./" prefix for files relative to CURDIR. While its required for executables (where a search-path is involved), it just clutters things up and is an irritating nuisance for plain data files and paths. OK, I know its only a silly comment, but the expression is "whole thing". ;) </rant>
flojo
Posts: 323
Joined: Thu Jun 22, 2023 4:27 am
Location: El Paso

Re: Complete Linux instructions to downgrade Hitachi/LG BU40N Blue-Ray firmware to v1.3 for makemkv

Post by flojo »

Cool.
Post Reply