Bl301 injection, problems, help,

I have here a test version for this “doesn’t work on Android, works on CE” issue.
If the bl301 got injected it will be checked now every boot if something changed in config.ini.
If yes, the blob is updated and the device reboot once to refresh the status.

I don’t have a “generic” device here and can’t finish testing as the Khadas devices do have a extra external IR decoder MCU for handling suspend/power off. I will continue tomorrow with another device.

Right now these parameters are supported and should work after a power off from Android too:


So setup your config.ini for your wake up config, reboot the device once and then enter Android and power off the device then. Then it should be possible to wake up the device by your IR wake up code.

1 Like

Will test it shortly and report back. Thanks Portisch! :slight_smile:

CoreELEC:/var/media/sda1-usb-USB_DISK_2.0_1I9/bootloader # sh
Updating device tree from /usr/share/bootloader/device_trees/g12a_s905x2_4g_1gbit.dtb...
Updating device_trees folder...
Updating aml_autoscript...
Updating cfgload... line 159: /usr/sbin/check-bl301: not found
remote-toggle: /meson-ir/ enabled in device tree...

checkbl301 for the latest Nightly build, so I’ve updated the script and ran it again. It didn’t run the injection automatically so I just done that through the CoreELEC. Testing now.

Tested it… But under Android, I power it off… Cannot get it to wake up, no Power LED comes on. It’s probably something wrong I’ve done, let me know what that might be. Thanks :slight_smile:

I don’t know, maybe Android is powering off the SoC completely and this may the reason why khadas have a extra MCU for wake up.

This is an instruction how to use inject_bl301
You don’t need to use

Will try the Standby mode.

Putting it to Suspend mode under CoreELEC. Waking it up (LED power indicator/status light comes on) doesn’t turn TV on either, and still required to manually turning TV on, and still shows no HDMI signal from the unit.

Putting the unit to sleep under Android, I can wake it up. I can’t remember if I’ve tested waking it up from standby with the official bl301 Injection release (I had, and that worked)… Will revert changes and test again the experimental package.

Before CoreELEC…, when unit suspended under Android, the LED power indicator/status light always remained on, unlike behaviour experienced with two other Beelink product types. Reported it over year ago, and few occasions in between, and nothing was ever done about it. However under CoreELEC, powering it off via ’ Power off system ’ the unit shuts down and also the light goes out too! Yet I can still wake it up and it turns TV on. I really like this because this unit has a bright light and sits just at the foot of my bed and shining ever so brightly like the north star at nights. :rofl:

I don’t follow boot2k3. This we testing is not the official package release, but an experimental one and requires different procedure for different package.

Hi. Thanks for the guide
I’m with this error after injecting bl301, whenever I reboot to CE. What was my wrong?

Here a new test version, the script is now working.

And I am talking only about a IR wake up code defined in config.ini.
There is nothing about power on the TV - this is a complete different issue (libCEC & CEC) and have nothing to do here in this topic. I have even no idea how Android is handling this.

The definedIR wake up code will now be also injected to the bl301 blob and should now work after powering down/suspended Android. It will boot to CE after wake up.

After update of CE with this tar file post the log get by this command:
cat /storage/init-previous.log | paste

@doncachopo As I know I didn’t change anything what can cause you this issue - maybe.
Please be sure you use a correct installed SD card/USB flash drive for CE.

1 Like

Perfect. I didn’t manage to test the previous version but this one works. Shutdown with the remote within Android, then powered back on with the remote into CE.

X96 Air, S905X3.


Can you please give example for

-s     define a system root path (needed for

I am not sure what means and for what its used, ans also not sure about what path is it in question, flash, or storage?

/dev/mmcblk0p1          524008    165096    358912  32% /flash
/dev/sda1             14143458    509304  12870660   4% /storage
/dev/loop0              152064    152064         0 100% /

What you trying to do? Just use the tar to update CE.
The system root is only needed by the system update script.

I just trying to prepare… I dont have x96 yet, but in case, if I would use that tool, I would like to know, if I need to use -s and how (I am using SD card for /flash and USB flash for /storage usually. I would like to have X96 booted entireally from USB, but if it wont work, I expect same setup SD+USB as always.)

I mean, how its “root” related to what updates, and what “root” is meant as default, and what roots are need to adjust by -s parameter :slight_smile:

The changes are now in the next nightly. Now the injected bl301 will be working also for Android wake up.

bl301 got rebased on original branch 'amlogic-dev_9.2.1811_21-dev'.

Since now the inject_bl301 tool is started on every boot by a service entry like the remote toggle script.
The tool checks the current injected bl301 blob and read also now the wake up keys from config.ini and “implement” them directly to the binary blob before injection.

Then the tool calculates the checksum and compare if an update is needed at all.
The config.ini keys values are now like hard coded to the bl301 - but still configurable by users:
 1. get correct bl301 blob for device
 2. read config.ini and implement the values in the blob binary
If the checksum is changed (maybe because a user edited a config.ini key) the tool injects the blob and reboot once to make the changes active.

It's now possible to use the wake up settings from config.ini for Android or from DC power supply off too as they "implementation" of the config.ini keys is like hard coding the values directly to the source.

Current available user config.ini keys for bl301:

The user is also now able to change the CEC OSD name shown on TV by using the 'cec_osd_name' key in config.ini.
This will enable a minimum of required blobs, but still allows full customization by users config.ini without the need of change the bl301 source.

Only Hardkernel Odroid devices still require the Linux driver tool 'CONFIG_BL301_MANAGER' to setup the bl301 when booting.
The injected bl301 blobs aren’t requiring this tool anymore.

 CoreELEC ir_pwr_key      = eb14ff00
 CoreELEC usr_ir_proto    = 00000000
 CoreELEC ir_pwr_key_mask = ffffffff
 CoreELEC system_power    = 00000001
 CoreELEC wake_on_lan     = 00000001
 CoreELEC cec_osd_name    = NEO T5

I already have BL301
Do I have to repeat the process or will update it after install last nightly?

CoreELEC-Amlogic-ng.arm-9.2-nightly_20200121-Generic causes issues with GT1 Mini 4+64GB, even attempting to use for the first time setup on a cleaned Micro-SD-Card. Stuck in a re-boot loop, long before CoreELEC logo ever appears, before preparation phase.

@Rootz no, the update is done automatically.
The update status can be checked by cat /storage/update-bl301.log

@Phant0m: Nightly builds (NEW)


That worked good Portisch. Like you said, It was occurring because I haven’t applied that, and It was looking for it. Good Job!