Editing Updating Bluray Drive Firmware on Linux

Jump to navigation Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
[[Category:OtherOS]]
[[Category:Linux]]
=Introduction=
=Introduction=


* Incredibly useful for grabbing ps3 firmware dumps using DRAM exploit + TOCTOU bug in bd fw update :)
* No use actually but just for the sake of scientific research :)
* see https://www.youtube.com/watch?v=LNFgKBfo2d8


=Current BD FW Version=
=Current BD FW Version=
Line 24: Line 23:
</pre>
</pre>


Or reading it from BD drive istelf, see: [[BD_Drive_Reverse_Engineering#Get_Version|Get Version]]
Or reading it from BD drive istelf, see http://www.ps3devwiki.com/wiki/BD_Drive_Reverse_Engineering#Get_Version.


=BD Drive Type=
=BD Drive Type=
Line 140: Line 139:
| 0x120000000000000B
| 0x120000000000000B
| 1
| 1
|-
| SONY    PS-EMBOOT  316R
| 0x220000000000000C
| 1
|-
| SONY    PS-SYSTEM  316R
| 0x120000000000000C
| 1
|-
| SONY    PS-EMBOOT  318R
| 0x220000000000000D
| 1
|-
| SONY    PS-SYSTEM  318R
| 0x120000000000000D
| 1
|-
|}
|}


Line 182: Line 164:


* Tested with my PS3 slim and OtherOS++.
* Tested with my PS3 slim and OtherOS++.
* It should work on PC too. You can update your BD drive on PC but first you need to authenticate it with '''bd_get_version'''.
* Downgrading works too. I tested it myself and downgraded from 3.50 to 3.40 and back again.
* Use '''ps3dm sm get_version''' or '''bd_get_version''' to verify that the new version was installed successfully.


Valid firmware:
<pre>
<pre>
sudo ./bd_update_fw -v -f ~/ofw355/BDPT_FIRMWARE_PACKAGE_306R.bin/content  
glevand@debian:~/git/ps3linux/bd-tools.git$ sudo ./bd_update_fw -v \
    -f ~/ofw355/BDPT_FIRMWARE_PACKAGE_306R.bin/content  
firmware length 786432
firmware length 786432
firmware h_id 0
firmware h_id 0
Line 196: Line 175:
=== START STOP (0x1b) ===
=== START STOP (0x1b) ===
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 3a 00 00 00
=== WRITE BUFFER (0x3b): offset 0 length 8000 ===
=== WRITE BUFFER (0x3b): offset 0 length 8000 ===
=== WRITE BUFFER (0x3b): offset 8000 length 8000 ===
=== WRITE BUFFER (0x3b): offset 8000 length 8000 ===
Line 221: Line 202:
=== WRITE BUFFER (0x3b): offset b8000 length 8000 ===
=== WRITE BUFFER (0x3b): offset b8000 length 8000 ===
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 07 00 00
req sense 20407
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 06 00 00 00 00 0a 00 00 00 00 29 00 00 00
req sense 62900
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20407 (because of invalid command issued. ignore it)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 20401 (unknown)
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
req sense 23a00 (success)
TEST UNIT READY failed: status 2 host status 0 driver status 8
</pre>
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401


Invalid firmware:
<pre>
sudo ./bd_update_fw -v -f ~/ofw355/BDPT_FIRMWARE_PACKAGE_306R.bin/info1 
firmware length 64
firmware h_id 0
=== INQUIRY (0x12) ===
vendor id SONY   
product id PS-SYSTEM  306R
=== START STOP (0x1b) ===
=== TEST UNIT READY (0x00) ===
=== TEST UNIT READY (0x00) ===
=== WRITE BUFFER (0x3b): offset 0 length 40 ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
WRITE BUFFER failed: req sense 52600 (invalid firmware combination or hash error)
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 04 01 00 00
req sense 20401
=== TEST UNIT READY (0x00) ===
TEST UNIT READY failed: status 2 host status 0 driver status 8
sense buffer: 70 00 02 00 00 00 00 0a 00 00 00 00 3a 00 00 00
</pre>
</pre>
{{Linux}}<noinclude>[[Category:Main]]</noinclude>
Please note that all contributions to PS3 Developer wiki are considered to be released under the GNU Free Documentation License 1.2 (see PS3 Developer wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To protect the wiki against automated edit spam, we kindly ask you to solve the following hCaptcha:

Cancel Editing help (opens in new window)