Skip to content

Commit

Permalink
Initial SD-less support
Browse files Browse the repository at this point in the history
Do not support encrypted storage yet
  • Loading branch information
luka177 committed Mar 17, 2024
1 parent 2135664 commit ef34004
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 4 deletions.
24 changes: 22 additions & 2 deletions backend/droidboot_drivers.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ static int droidboot_lwext_sd_dev_bwrite(struct ext4_blockdev *bdev, const void
EXT4_BLOCKDEV_STATIC_INSTANCE(droidboot_abm_settings_dev, 512, 0, droidboot_platform_settings_dev_open,
droidboot_lwext_sd_dev_bread, droidboot_lwext_sd_dev_bwrite, droidboot_platform_settings_dev_close, 0, 0);

EXT4_BLOCKDEV_STATIC_INSTANCE(droidboot_userdata_settings_dev, 4096, 0, droidboot_platform_settings_dev_open,
droidboot_lwext_sd_dev_bread, droidboot_lwext_sd_dev_bwrite, droidboot_platform_settings_dev_close, 0, 0);

droidboot_ret droidboot_driver_init(){
droidboot_ret ret = DROIDBOOT_EOK;
sdfail=false;
Expand All @@ -41,7 +44,7 @@ droidboot_ret droidboot_driver_init(){

// Launch lvgl threads
droidboot_lvgl_threads_init();
if(droidboot_parse_gpt_on_sd()==DROIDBOOT_EOK){
if(droidboot_parse_gpt_on_sd()==DROIDBOOT_EOK && abm_settings_offset!=0){
droidboot_abm_settings_dev.part_offset = abm_settings_offset * droidboot_sd_blklen();
droidboot_abm_settings_dev.bdif->ph_bsize = droidboot_sd_blklen();
droidboot_abm_settings_dev.bdif->ph_bcnt = abm_settings_blkcnt;
Expand All @@ -54,7 +57,24 @@ droidboot_ret droidboot_driver_init(){
sdfail=true;
}
droidboot_log(DROIDBOOT_LOG_TRACE, "Ext4 mount returns: %d\n", r);
} else {
}
#ifdef DROIDBOOT_NO_SD_SUPPORT
else if(userdata_offset!=0){
droidboot_userdata_settings_dev.part_offset = userdata_offset * droidboot_sd_blklen();
droidboot_userdata_settings_dev.bdif->ph_bsize = droidboot_sd_blklen();
droidboot_userdata_settings_dev.bdif->ph_bcnt = userdata_blkcnt;
droidboot_userdata_settings_dev.part_size = abm_settings_blkcnt*droidboot_sd_blklen();
ext4_device_register(&droidboot_userdata_settings_dev, "abm_settings");
droidboot_log(DROIDBOOT_LOG_INFO, "Registered userdata, offset %d, bcnt: %llu\n", userdata_offset, userdata_blkcnt);
droidboot_log(DROIDBOOT_LOG_TRACE, "going to mount userdata\n");
int r=ext4_mount("abm_settings", "/boot/", false);
if(r!=DROIDBOOT_EOK){
sdfail=true;
}
droidboot_log(DROIDBOOT_LOG_TRACE, "Ext4 mount returns: %d\n", r);
}
#endif
else {
sdfail=true;
}

Expand Down
3 changes: 2 additions & 1 deletion common/droidboot_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ void droidboot_show_dualboot_menu()
if(droidboot_have_fallback())
droidboot_log(DROIDBOOT_LOG_ERROR, "droidboot main: failed to get sd card\n");
else
droidboot_log(DROIDBOOT_LOG_FATAL, "droidboot main: failed to get sd card\n");
droidboot_log(DROIDBOOT_LOG_ERROR, "droidboot main: failed to get sd card\n");
while(1);
return;
}

Expand Down
3 changes: 3 additions & 0 deletions droidboot_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@

// DROIDBOOT_LOG_LEVEL can be 0-5 where 0 - trace, 1 - info, 2 - warning, 3 - error, 4 - fail, 5 - nothing
#define DROIDBOOT_LOG_LEVEL 0

// DROIDBOOT_NO_SD_SUPPORT can be 1 or 0, enables SD less dualboot support
#define DROIDBOOT_NO_SD_SUPPORT 1
6 changes: 6 additions & 0 deletions include/droidboot_gpt.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@

#pragma once

#include <droidboot_config.h>
#include <droidboot_error.h>
#include <droidboot_logging.h>
#include <stdbool.h>
Expand Down Expand Up @@ -147,4 +148,9 @@
extern uint64_t abm_settings_offset;
extern uint64_t abm_settings_blkcnt;

#ifdef DROIDBOOT_NO_SD_SUPPORT
extern uint64_t userdata_offset;
extern uint64_t userdata_blkcnt;
#endif

droidboot_error droidboot_parse_gpt_on_sd();
25 changes: 24 additions & 1 deletion storage/droidboot_gpt.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@ struct gpt_header {

uint64_t abm_settings_offset;
uint64_t abm_settings_blkcnt;

#ifdef DROIDBOOT_NO_SD_SUPPORT
uint64_t userdata_offset;
uint64_t userdata_blkcnt;
#endif

bool parse_done = false;

static droidboot_error validate_mbr_partition(const struct mbr_part *part)
Expand Down Expand Up @@ -92,6 +98,9 @@ droidboot_error droidboot_parse_gpt_on_sd()
{
droidboot_log(DROIDBOOT_LOG_INFO, "Enter droidboot_parse_gpt_on_sd\n");
abm_settings_blkcnt=0;
#ifdef DROIDBOOT_NO_SD_SUPPORT
userdata_blkcnt=0;
#endif
if(parse_done){
return DROIDBOOT_EOK;
}
Expand Down Expand Up @@ -214,11 +223,25 @@ droidboot_error droidboot_parse_gpt_on_sd()
abm_settings_offset=first_lba;
abm_settings_blkcnt=size;
}

#ifdef DROIDBOOT_NO_SD_SUPPORT
if(strcmp(name, "userdata")==0){
droidboot_log(DROIDBOOT_LOG_INFO, "FOUND userdata\n");
userdata_offset=first_lba;
userdata_blkcnt=size;
}
#endif
//droidboot_log(DROIDBOOT_LOG_INFO, "got part!!!!!!!!!!!!!! '%s' size=%llu!, first lba: %d\n", name, size, first_lba);
// TODO: So something with this part
}
}

#ifdef DROIDBOOT_NO_SD_SUPPORT
if(userdata_blkcnt!=0)
{
return DROIDBOOT_EOK;
}
#endif

if(abm_settings_blkcnt==0)
{
return DROIDBOOT_ENOENT;
Expand Down

0 comments on commit ef34004

Please sign in to comment.