CIC Music collection lost - is it hbmedia? Log file attached

yuggoboy

New Member
Apr 26, 2023
8
1
0
Hi guys

I have been digging in for a few months now but without luck

Media partition with MP3 files have dissapeared from my CIC. I took the HDD out and connected it to the PC and booted QNX and all the files are there. I then build a OBD->Ethernet cable and successfully logged into the CIC in the car. I took out the logs from QNX by sloginfo and I still couldnt see the problem. I succeeded to get the CIC to actually mount the media partition /mnt/hbmedia but still its not visible in the CIC application to move the files. I think I have done everything. I also cloned the disk and saved the image I used the original HD, the new SSD and the compatible HDD EIDE but still nothing. All other functions work fine including Navi.

Is there ANYONE who knows what to do?

I am now thinking to use Tool32 and CICR_HD.PRG to see if there is an option to "re-initialize" the HDD but Im very unsure.

Please se attached LOG file

Anyone have any thoughts on what might be the problem? All help is appreciated.
 

Attachments

  • CIC_log.txt
    93 KB · Views: 15

808AWD325xi

Lurker
Nov 27, 2016
21
11
0
Moline, IL
Ride
2009 335i
Hi guys

I have been digging in for a few months now but without luck

Media partition with MP3 files have dissapeared from my CIC. I took the HDD out and connected it to the PC and booted QNX and all the files are there. I then build a OBD->Ethernet cable and successfully logged into the CIC in the car. I took out the logs from QNX by sloginfo and I still couldnt see the problem. I succeeded to get the CIC to actually mount the media partition /mnt/hbmedia but still its not visible in the CIC application to move the files. I think I have done everything. I also cloned the disk and saved the image I used the original HD, the new SSD and the compatible HDD EIDE but still nothing. All other functions work fine including Navi.

Is there ANYONE who knows what to do?

I am now thinking to use Tool32 and CICR_HD.PRG to see if there is an option to "re-initialize" the HDD but Im very unsure.

Please se attached LOG file

Anyone have any thoughts on what might be the problem? All help is appreciated.

From the log, it looks like the TI DM642 DSP isn't functioning:
Code:
Nov 29 16:38:13    6 20000     0 Process[23]: 'POST_STARTING' '/bin/dev-dspipc'
Nov 29 16:38:13    6 20000     0 PSState[23] '/bin/dev-dspipc': TRG_RUN_PROCESS causes: IDLE->POST_STARTING
Nov 29 16:38:13    5 20001     1 dev-dspipc: process started PID=0x0000001A
Nov 29 16:38:13    5 20001     0 dev-dspipc: Label: PL_qnx_dev-dspipc_08383A QNX: RL_qnx_os_630SP2_PSP10_08193A Built: 2008/09/17_05-59-22_UTC
Nov 29 16:38:13    5 20001     1 dev-dspipc: process started PID=0x0000001A
Nov 29 16:38:13    5 20001     0 dev-dspipc: Label: PL_qnx_dev-dspipc_08383A QNX: RL_qnx_os_630SP2_PSP10_08193A Built: 2008/09/17_05-53-30_UTC
Nov 29 16:38:13    2 20001     0 dev-dspipc: dspipc_dm642_init: -verbose Option not available in this version. If you need this Option, please contact: [email protected]
Nov 29 16:38:13    2 20001     0 dev-dspipc: Dm642Attach: Detected HB system
Nov 29 16:38:14    2 20001     0 dev-dspipc: startChipset: dm642.0 Firmware loaded
Nov 29 16:38:14    2 20001     0 dev-dspipc: startChipset: dm642.0 Firmware started
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_startApplication: No communication established
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_startApplication: Read 0x00000000 instead of magic word DEADBEEF
Nov 29 16:38:20    2 20001     0 dev-dspipc: startChipset: dm642.0 Cannot start application
Nov 29 16:38:20    2 20001     0 dev-dspipc: DllLoadAndInit: Start Chipset dm642.0 failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: DllLoadAndInit: 1. Start Chipset dm642.0 failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_intrThread: Terminate pulse code received
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipcIntrThread: InterruptThread for dm642.0 terminated
Nov 29 16:38:20    5 20001     2 dev-dspipc: process terminated PID=0x0000001A
Nov 29 16:38:20    2 20001     0 dev-dspipc: options: Dll load and init failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: Error starting dev-dspipc !!
Nov 29 16:38:20    6 20000     0 Process[23]: '/bin/dev-dspipc' terminated with code: 'EXIT_ERROR'
Nov 29 16:38:20    6 20000     0 Process /bin/dev-dspipc terminated with EXIT_FAILURE
Nov 29 16:38:20    6 20000     0 Process[23]: 'STOP' '/bin/dev-dspipc'
Nov 29 16:38:20    6 20000     0 Process[23] '/bin/dev-dspipc' should 'ignore all': not restarted[/B]
Nov 29 16:40:48    3 20001     0 dev-dspipc: io_devctl to directory entry [PID=368692;TID=1]
Nov 29 16:40:48    3 20001     0 dev-dspipc: io_devctl to directory entry [PID=368692;TID=1]

I don't know the exact purpose for the DM642 in the CIC, but considering it's a video/imaging DSP, my guess would be that you can't play DVDs.

I also noticed that several of your filesystems were dirty (hbuser and hbmedia), in addition, hbdebug was corrupted and couldn't be mounted.

If you have a backup of your HDD, it should be replaced. If that doesn't fix it, you could try flashing the CIC and/or replacing it.
 

yuggoboy

New Member
Apr 26, 2023
8
1
0
From the log, it looks like the TI DM642 DSP isn't functioning:
Code:
Nov 29 16:38:13    6 20000     0 Process[23]: 'POST_STARTING' '/bin/dev-dspipc'
Nov 29 16:38:13    6 20000     0 PSState[23] '/bin/dev-dspipc': TRG_RUN_PROCESS causes: IDLE->POST_STARTING
Nov 29 16:38:13    5 20001     1 dev-dspipc: process started PID=0x0000001A
Nov 29 16:38:13    5 20001     0 dev-dspipc: Label: PL_qnx_dev-dspipc_08383A QNX: RL_qnx_os_630SP2_PSP10_08193A Built: 2008/09/17_05-59-22_UTC
Nov 29 16:38:13    5 20001     1 dev-dspipc: process started PID=0x0000001A
Nov 29 16:38:13    5 20001     0 dev-dspipc: Label: PL_qnx_dev-dspipc_08383A QNX: RL_qnx_os_630SP2_PSP10_08193A Built: 2008/09/17_05-53-30_UTC
Nov 29 16:38:13    2 20001     0 dev-dspipc: dspipc_dm642_init: -verbose Option not available in this version. If you need this Option, please contact: [email protected]
Nov 29 16:38:13    2 20001     0 dev-dspipc: Dm642Attach: Detected HB system
Nov 29 16:38:14    2 20001     0 dev-dspipc: startChipset: dm642.0 Firmware loaded
Nov 29 16:38:14    2 20001     0 dev-dspipc: startChipset: dm642.0 Firmware started
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_startApplication: No communication established
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_startApplication: Read 0x00000000 instead of magic word DEADBEEF
Nov 29 16:38:20    2 20001     0 dev-dspipc: startChipset: dm642.0 Cannot start application
Nov 29 16:38:20    2 20001     0 dev-dspipc: DllLoadAndInit: Start Chipset dm642.0 failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: DllLoadAndInit: 1. Start Chipset dm642.0 failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipc_dm642_intrThread: Terminate pulse code received
Nov 29 16:38:20    2 20001     0 dev-dspipc: dspipcIntrThread: InterruptThread for dm642.0 terminated
Nov 29 16:38:20    5 20001     2 dev-dspipc: process terminated PID=0x0000001A
Nov 29 16:38:20    2 20001     0 dev-dspipc: options: Dll load and init failed
Nov 29 16:38:20    2 20001     0 dev-dspipc: Error starting dev-dspipc !!
Nov 29 16:38:20    6 20000     0 Process[23]: '/bin/dev-dspipc' terminated with code: 'EXIT_ERROR'
Nov 29 16:38:20    6 20000     0 Process /bin/dev-dspipc terminated with EXIT_FAILURE
Nov 29 16:38:20    6 20000     0 Process[23]: 'STOP' '/bin/dev-dspipc'
Nov 29 16:38:20    6 20000     0 Process[23] '/bin/dev-dspipc' should 'ignore all': not restarted[/B]
Nov 29 16:40:48    3 20001     0 dev-dspipc: io_devctl to directory entry [PID=368692;TID=1]
Nov 29 16:40:48    3 20001     0 dev-dspipc: io_devctl to directory entry [PID=368692;TID=1]

I don't know the exact purpose for the DM642 in the CIC, but considering it's a video/imaging DSP, my guess would be that you can't play DVDs.

I also noticed that several of your filesystems were dirty (hbuser and hbmedia), in addition, hbdebug was corrupted and couldn't be mounted.

If you have a backup of your HDD, it should be replaced. If that doesn't fix it, you could try flashing the CIC and/or replacing it.
Thanks for the answer... I was waiting for a proper coding PSU to come before I started updating the modules, or actually I have built my own from HP Server PSU, HP DPS-1200FB, it took me a while, was complicated and very tiny soldering points. I have backed up the HDD and my girlfriend has actually the same version of car. I took her HDD put in CIC and everything was going good, and I took the image from my old HDD and put it on an SSD and then everything worked. I had lot like 5 Ripped directories and would say total of 300-400 MP3 files.

Yesterday I did:

- Update or reinstalled the CIC firmware through WinKPF (didnt do anything, but I had my girlfriends HDD image version in on original drive, which might also be an issue)
- I made a cable, OBD2-Ethernet which allows me to directly connect laptop to CIC and telnet to it, I am starting to create an understand on the QNX and with my unix knowledge Im starting to think that there is either HDD filesystem issue, that intermittently leads to a database QDB (SQL) issue which then leads to the symptom that Music Library is not loading, from the database
- Took the copy of the /etc dir on CIC and examined some config files such as mmelauncher.cfg and mme.conf which are configuring the mme (multimedia) in CIC.

Where MME is:
mme_exe = /usr/sbin/mme
mme_hdd_params = -vvv -c /etc/mme.conf
mme_nohdd_params = -vvv -c /etc/mme.conf

Where QDB server & client are:
qdb_exe = /usr/sbin/qdb
qdb_hdd_params = -t block -T block -c /usr/mme/db/qdb.cfg -O unblock=0,tempstore=/fs/tmpfs,thread=20 -R set -v
qdb_nohdd_params = -t block -T block -c /usr/mme/db/qdb.cfg -O unblock=0,tempstore=/fs/tmpfs,thread=20 -R set -v
qdbc_exe = /usr/sbin/qdbc

This is the part if devices are missing or db integrity checks fail:
# - if /dev/XX is specified and db integrity checks fail the
# device will be formatted
qdb_prestart_script = /etc/pre_starting_qdb.sh
# qdb_poststart_script = /etc/post_starting_qdb.sh

Here are MME databases:
mme_db = /fs/tmpfs
mme_db1 = /mnt/hbuser/SQL/qdbH/qdb-backup1
mme_db2 = /mnt/hbuser/SQL/qdbH/qdb-backup2

mme_db_main = mme
mme_db_library = mme_library
mme_db_temp = mme_temp
mme_db_custom = mme_custom

# mme_db2 = /HBpersistence/mme/bks2
# mme_cache = /fs/tmpfs/mmecache
# mme_media_link = /media/drive
# mme_media_real = /mnt/hd0t77/mp3
qdb_db_on_hdd = 0


Today:
- Will use the original image from the car, but with the same symptoms on the original drive (the drive can have issues too, so I will have a backup SSD drive with PATA interface) and with original image will try to update the CIC again they point to
- Will try to modify setting "check_db_integrity" in mmelauncher.cfg from 0 to 1
- Will check the hddmgr paremeters in mmelauncher.cfg that hdd is properly mounted because that may be an issue as well and this is the relevant part in the mmelauncher.cfg

dinit_cache_exe = /HBMedia/qnx/bin/dinit
dinit_cache_params = -h -q
dinit_medstore_exe = /HBMedia/qnx/bin/dinit
dinit_medstore_params = -h -q
dinit_db1_exe = /HBMedia/qnx/bin/dinit
dinit_db1_params = -h -q
dinit_db2_exe = /HBMedia/qnx/bin/dinit
dinit_db2_params = -h -q

It can be hddmgr issue too.

Since I have reinstalled the firmware from CIC, the fault must be on the HDD side but HDD was from my girlfriends car which works for her and which worked for me when I swapped HDD in CIC from original so its really a mistery.

It bothers me that these errors are not showed presented on screen are no in sloginfo, i.e. that the application for playing the MP3 files is not seeing the harddrive, probably since it tries to load the database of songs or something is corrupted there. QDB should be logging there or maybe its the HMI interface issues that errors are not logged.

Any thoughts and suggestions would be highly appreciated, I have seen these problem quite frequently happens and would be nice to present the solution to the world

Thank you in advance!
 
Last edited:

yuggoboy

New Member
Apr 26, 2023
8
1
0
No luck today.

I have 3 versions of the HDD images I made with DD:

1) Original HDD image when the problem came and I switched to SSD
2) MY girlfriends HDD image from her car which is exactly the same setup like mine
3) Working HDD image that was working, when I put my GF HDD image in the car, all started to work (with her entertaintment database and songs) and when I put the original image in, everything worked somehow. so...its crazy anyways I made the image for later just in case

I had 3 disks with me, all with above images, I put them in the newly flashed CIC and... same problem!

I also re-flashed the firmware twice, once with WinKPF and second time with ISTA/P which included flashing and coding. This shit really beats me :) Can it be a hardware issue but why? I dont see anything in the logs.

I still believe its the database issue and not the hardware issue. I believe that Music Library is where all the songs are placed and they are managed like database in QBD. I see that qbd server is not running after I start the navi boots for some reason and I dont know why is not starting

The databases are opened in temporary persistence file in flash however they are backed up on disk and again recreated after the reboot, that is what I believe not what I know for sure. BUT.. the QDB is just not starting for some reason..

I started the qdb by using the following command:

/usr/sbin/qdb -t block -T block -c /usr/mme/db/qdb.cfg -O unblock=0,tempstore=/fs/tmpfs,thread=20 -R set -vvv

Then I was able to connect by qdbc but I am totally unfamiliar with the commands so I could not verify the content of the database more that I can see that there are tables when writing ? and entering it in the qdbc clients interactive shell

As you can see the QDB is according to the config starting with the "-R" recovery option to "set"

Options are:
- auto -
File manipulation is fully automatic and a best effort is always made to establish a valid database connection at startup. Files are backed up individually and restored individually.A corrupt or missing database file is restored from the most recent valid backup that can be located. If there's no such backup, a blank database is recreated from the original schema definition.
- manual -
The only action performed is to create a blank database from the original schema definition if the database file is missing at startup. Databases are not restored from backups. If the file is corrupt, the server will not start. If the file is missing or corrupt at runtime, no access to that database is permitted and it will not be restored or recreated. This mode is intended to allow the creation of a new system or to give manual control over error recovery (e.g., to preserve the corrupt database for later analysis).
- set -
Backups of attached databases are treated as a coherent set, so an error with any of the component databases causes QDB to restore a complete and matching set of all database files. This is useful if attached databases refer to each other.The set master is the database that attaches other databases (by using the AutoAttach option in the configuration object). The backup set contains the set master and all attached databases that have BackupAttached enabled. Note that the set master can be backed up incrementally and still belong to the set.

The problem is that the music library in CIC is not "seeing" either the database that "acts" as a hard drive or the actual hard drive but I dont think the hard drive is there as a device but maybe as a database but I really dont know. We need someone who coded this damned appllication :) All hard drives and their mounted points are mounted and visible to the OS and to me by terminal

Its eiter the database or something fishy with the srv-hddmgr which is executing the hddmgr.conf in /etc and there might be something wrong in the execution or persistency or some dirty file and the srv-hddmgr doesnt execute correctly trough

[ srv-hddmgr ]

eide_driver_path = /dev/hd0

strategy_flags = -linked_mode;

/* Path to hddmgr persistency file, no longer needed so save in ramdisk */
persistency_file_path = /dev/shmem/persistency.hddmgr;
eeprom_file_path = /dev/eeprom/SH4/SH4Params/DirtyByte;
eeprom_interpret_ff_as_zero =1

mount_path_name = -r -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77 /mnt/hbnavi;
mount_path_name = -r -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77.1 /mnt/hbcddb;
mount_path_name = -r -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77.2 /mnt/hbdata;
mount_path_name = -w -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77.3 /mnt/hbuser;
mount_path_name = -w -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77.4 /mnt/hbmedia;
mount_path_name = -w -Z -t qnx6 -C { /usr/bin/touch /dev/shmem/chkfsys.done } /dev/hd0t77.5 /mnt/hbdebug;


Im running out of ideas soon :)

All advice and help is appreciated
 
Last edited:

yuggoboy

New Member
Apr 26, 2023
8
1
0
Well today I decided to test my thoughts on my GF's car, she has the exact same BMW X6 40d as me and her CIC has an older FW because the root passwords are different mine has the newer version and hers has the older version pass.

Anyways I tested if the "Library" and "Drive" are database based in the MME player and they are. I decided to erase the library in her car since she only has 3 songs there and uses bluetooth. So here is the log output from her car

Oct 22 13:02:08 5 27 0 MME:io_handle_msg(120): RCV(ccid 1) -> MME_IOMSG_TYPE_STOP
Oct 22 13:02:08 5 27 0 MME:ntfy_log_event(618): MME_EVENT_PLAYSTATE(playstate=7,speed=1000)
Oct 22 13:02:08 5 27 0 MME:io_handle_msg(567): RCV(ccid 1) -> MME_IOMSG_TYPE_SYNCDIRSYNC: "msid=1 path=/ flags=5001"
Oct 22 13:02:08 5 27 0 MME:mmpl_connect(227): Thread 17 connecting to database.
Oct 22 13:02:09 5 27 0 MME:mmpl_connect(238): Thread 17 connected to database.
Oct 22 13:02:09 5 27 0 MME:ntfy_log_event(697): MME_EVENT_MS_SYNC_STARTED(media store 1, operation ID 1)
Oct 22 13:02:09 5 27 0 MME:mmpl_ms_sync_thread(1530): Media store 1 is prunable.
Oct 22 13:02:09 5 27 0 MME:mmpl_ms_set_unsynced(930): Set all folders as unsynced on media store 1.
Oct 22 13:02:09 5 27 0 MME:mss_bfs_sync_device_pass1(394): msid=1 -- First PASS --
Oct 22 13:02:09 5 27 0 MME:folder_trim(680): Checking folder 1 "/mnt/hbmedia/entertainmentserver/".
Oct 22 13:02:09 5 27 0 MME:folder_trim(761): Starting trim of folder "/mnt/hbmedia/entertainmentserver/" (ID 1).
Oct 22 13:02:09 5 27 0 MME:_mss_bfsrecurse_sync_dir_1(1065): Attemping first pass sync add on media store 1 "/mnt/hbmedia/entertainmentserver//"
Oct 22 13:02:09 5 27 0 MME:ntfy_log_event(660): MME_EVENT_MS_UPDATE(Flags 1; Op ID: 1; Mediastore 1; files 0; folders 1.)
Oct 22 13:02:09 5 27 0 MME:mmpl_ms_sync_pass(1149): Clearing invalid copied_fid columns.
Oct 22 13:02:09 5 27 0 MME:mmpl_ms_sync_pass(1169): Done clearing invalid copied_fid columns.
Oct 22 13:02:09 5 27 0 MME:ntfy_log_event(703): MME_EVENT_MS_1PASSCOMPLETE(media store 1, operation ID 1)
Oct 22 13:02:09 6 10000 0 [vdev-tunnelipc 00015.09I] rIPC 10 0500161B1D2500000000
Oct 22 13:02:10 5 27 0 MME:ntfy_log_event(721): MME_EVENT_MS_SYNCCOMPLETE(media store 1, operation ID 1)
Oct 22 13:02:10 5 27 0 MME:io_handle_msg(209): RCV(ccid 1) -> MME_IOMSG_TYPE_TRKVIEW_UPDATE
Oct 22 13:02:10 2 27 0 MME:_msgtrkviewupdate(4019): Can't update trksession ID 0
Oct 22 13:02:10 2 27 0 MME:_setgenericvalue(887): Send Error for request=36, value=1. errno 22
Oct 22 13:02:10 5 27 0 MME:mmpl_disconnect(454): Thread 17 disconnecting from database.
Oct 22 13:02:10 6 10000 0 [vdev-tunnelipc 00015.09I] rIPC 10 0500161B1C2600000000
Oct 22 13:02:11 6 10000 0 [vdev-tunnelipc 00015.09I] rIPC 10 0500161B1D2600000000

Which leads me to believe that all songs are added to the database with "link" to the actual file on the HDD and that "Size" is deducted and that is why people who replaced their drives with larger always see 12GB limit and not more, because its hardcoded in the scripts or software and MME player does not have direct contact to the drive only trough the DB or QDB by QDBC client. there is probably some script then that erases the /mnt/hbmedia/entertaintmentserver directory according to above

There is a document describing this here


I have not read it yet but I will try to dig into it. Is there anyone who can make the job easier? :)

As a solution to all the people that have this problem, a simple script could be executed on the bmw CIC that fixed all of the above and "resets" the Music Library. There is also possibility to "backup" the files by transferring them first either by FTP trough OBD-Ethernet cable or by extracting the disk and mounting it on unix machine.
 
  • Informative
Reactions: wheela

yuggoboy

New Member
Apr 26, 2023
8
1
0
PS: Two possible reasons why I think the problem with the Music Libray not loading and just showing "Wait.." are

1) Special character metadata crashing MME and/or QDB connection. I have seen that QDB is not starting at all but is not giving any logs either. I was using the MediaHuman software to convert Youtube songs to Mp3. What Mediahuman does tho is that it adds at lot of special characters into header of the mp3 file (songtitle, name etc.) which are then imported into the SQL database as metadata for each mp3 file. What that metadata probably does it hat it probably crashes the MME player or its DB connection which results

2) Corrupted SQL database which is "backed up" as corrupted
 

yuggoboy

New Member
Apr 26, 2023
8
1
0
More findings:

There is actually a script on the drive in /bin or /sbin called cleanEntertainment.sh

This script cotains following code:

#!/bin/sh

rm -rf /mnt/hbmedia/entertainmentserver/*
rm -rf /mnt/hbuser/SQL/qdb/*
rm -rf /mnt/hbmedia/BACKUP

What it does is actually removing the actual MP3 files in first row, and removes SQL database in second and backups in third. However, I think that the database still needs to be recreated from something and that something is the SQL files on the disk, for different databases found at /usr/mme/db/ where every database has its own .SQL file with creation SQL commands for the following databases below, main (mme), library (mme_library), temporary (mme_temp) and custom (mme_custom)

mme_db_main = mme
mme_db_library = mme_library
mme_db_temp = mme_temp
mme_db_custom = mme_custom

However there is a script starting the MME (MultiMedia interface) in QNX called mmelauncher.cfg and it contains

# Configuration file for mmelauncher
#
# File format:
# - Comment : # at line start
# - Config entry: key [ws] = [ws] value
# empty line will be ignored

# -----------------------------------
# path to executables / devices
# - the nohdd paths will be used if check_hdd_availability is disabled!

mme_exe = /usr/sbin/mme
mme_hdd_params = -vvv -c /etc/mme.conf
mme_nohdd_params = -vvv -c /etc/mme.conf

qdb_exe = /usr/sbin/qdb
qdb_hdd_params = -t block -T block -c /usr/mme/db/qdb.cfg -O unblock=0,tempstore=/fs/tmpfs,thread=20 -R set -v
qdb_nohdd_params = -t block -T block -c /usr/mme/db/qdb.cfg -O unblock=0,tempstore=/fs/tmpfs,thread=20 -R set -v

qdbc_exe = /usr/sbin/qdbc

qdb_device = /dev/qdb

script_path = /etc

# hddmgr_device = /dev/hddmgr

dinit_cache_exe = /HBMedia/qnx/bin/dinit
dinit_cache_params = -h -q
dinit_medstore_exe = /HBMedia/qnx/bin/dinit
dinit_medstore_params = -h -q
dinit_db1_exe = /HBMedia/qnx/bin/dinit
dinit_db1_params = -h -q
dinit_db2_exe = /HBMedia/qnx/bin/dinit
dinit_db2_params = -h -q

# -----------------------------------
# path to MME databases
# - mme_db paths may be /mnt/XX or /dev/XX
# - if /dev/XX is specified and db integrity checks fail the
# device will be formatted

qdb_prestart_script = /etc/pre_starting_qdb.sh
# qdb_poststart_script = /etc/post_starting_qdb.sh

mme_db = /fs/tmpfs
mme_db1 = /mnt/hbuser/SQL/qdbH/qdb-backup1
mme_db2 = /mnt/hbuser/SQL/qdbH/qdb-backup2

mme_db_main = mme
mme_db_library = mme_library
mme_db_temp = mme_temp
mme_db_custom = mme_custom

# mme_db2 = /HBpersistence/mme/bks2
# mme_cache = /fs/tmpfs/mmecache
# mme_media_link = /media/drive
# mme_media_real = /mnt/hd0t77/mp3
qdb_db_on_hdd = 0

# -----------------------------------
# options modifying the dynamic program behaviour

# possible values: 0, 1 = do integrity checks
check_db_integrity = 0

# possible values: 0, 1 = check version of custom DB
check_custom_version = 1

# possible values:
# 0 = start without HDD checking
# 1 = wait for hdd mount to continue (info from HDD Manager)
# if HDD is not available, MME will be started in noHDD mode
check_hdd_availability = 0

# Switch to enable remounting of partitions to r/w prior writing to them
remount_hdd = 0

# possible values: update, recover
on_db_version_mismatch = update

# possible values: remove, format
db_recovery_method = remove

# this is the expected version of the MME custom DB
db_custom_version = 27

# timeout to wait for HDD in seconds
hdd_timeout = 10

# eof


And you can see reference to qdb_prestart_script = /etc/pre_starting_qdb.sh which contains

#!/bin/ksh

EXIT_OK=0
EXIT_ERROR=1

echo "Run pre starting QDB script" > /dev/console

# Check for latest MME backup and copy to correct place

if [ -f /mnt/hbuser/SQL/qdbH/qdb-backup1/mme ] ; then
echo "Backup qdbH is existing. Ceck for other backups." > /dev/console
if [ -x /mnt/hbuser/SQL/qdb209 ] ; then
echo "Erase qdbH and qdb209" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
rm -R qdb209
fi
if [ -x /mnt/hbuser/SQL/qdb2081 ] ; then
echo "Erase qdbH and qdb2081" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
rm -R qdb2081
fi
if [ -x /mnt/hbuser/SQL/qdb208 ] ; then
echo "Erase qdbH and qdb208" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
rm -R qdb208
fi
if [ -x /mnt/hbuser/SQL/qdb20 ] ; then
echo "Erase qdbH and qdb20" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
rm -R qdb20
fi
if [ -x /mnt/hbuser/SQL/qdb ] ; then
echo "Erase qdbH" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
fi
if [ -f /mnt/hbuser/SQL/mme ] ; then
echo "Erase qdbH and backup files under /mnt/hbuser/SQL" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
rm mme
cd /mnt/hbuser/SQL
rm mme_library
cd /mnt/hbuser/SQL
rm mme_temp
cd /mnt/hbuser/SQL
rm mme_custom
cd /mnt/hbuser/SQL
rm .mme
cd /mnt/hbuser/SQL
rm .mme.
fi
fi

# Now we have either a good qdbH without other backups or a 12.7. qdb (old backup) or only nothing at all

if [ -x /mnt/hbuser/SQL/qdb ] ; then
echo "Backup qdb is existing. Rename to qdbH." > /dev/console
cd /mnt/hbuser/SQL
rm -R qdbH
cd /mnt/hbuser/SQL
mv qdb qdbH
fi

if [ ! -x /mnt/hbuser/SQL/qdbH ] ; then
echo "Backup qdbH is not existing. Create qdbH." > /dev/console
cd /mnt/hbuser/SQL
mkdir qdbH
cd /mnt/hbuser/SQL/qdbH
mkdir qdb-backup1
fi

# Erase all old backups
if [ -x /mnt/hbuser/SQL/qdb209 ] ; then
echo "Erase qdb209" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdb209
fi
if [ -x /mnt/hbuser/SQL/qdb2081 ] ; then
echo "Erase qdb2081" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdb2081
fi
if [ -x /mnt/hbuser/SQL/qdb208 ] ; then
echo "Erase qdb208" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdb208
fi
if [ -x /mnt/hbuser/SQL/qdb20 ] ; then
echo "Erase qdb20" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdb20
fi
if [ -x /mnt/hbuser/SQL/qdb ] ; then
echo "Erase qdb" > /dev/console
cd /mnt/hbuser/SQL
rm -R qdb
fi
if [ -f /mnt/hbuser/SQL/mme ] ; then
echo "Erase files under /mnt/hbuser/SQL" > /dev/console
cd /mnt/hbuser/SQL
rm mme
cd /mnt/hbuser/SQL
rm mme_library
cd /mnt/hbuser/SQL
rm mme_temp
cd /mnt/hbuser/SQL
rm mme_custom
cd /mnt/hbuser/SQL
rm .mme
cd /mnt/hbuser/SQL
rm .mme.
fi

if [ -x /mnt/hbmedia ] ; then

# Create directories

# Create /mnt/hbmedia/entertainmentserver because of MME Common problem
if [ ! -x /mnt/hbmedia/entertainmentserver ] ; then
echo "Create /mnt/hbmedia/entertainmentserver" > /dev/console
cd /mnt/hbmedia
mkdir entertainmentserver
fi

if [ ! -x /mnt/hbmedia/pv_cover_cache ] ; then
echo "pv_cover_cache directory is not existing. Create /mnt/hbmedia/pv_cover_cache." > /dev/console
cd /mnt/hbmedia
mkdir pv_cover_cache
fi
fi

exit $EXIT_OK

and as you can see it can be executed since its a .sh shell script in /etc and executable. However it does many checks and doesnt really reset the database as it should if some files are existing. For that a new script needs to be written

However when I see all this, I think all this QNX BMW CIC thing is very poorely coded it has so many dependencies on different scripts that its crazy to follow up and get some understanding.