Patch from Woody Suwalski:
Erik, I think we have met online some time ago when I was in Corel/Rebel Netwinder project.... Anyway, I would like to use BB on 2.6.0 initrd. 1.00-pre4 works OK, if insmod is actually presented with a full path to the module. Otherwise - problems (not to mention conflicts when 2.4 modutil is enabled) Here are some patches for insmod and modprobe which try to walk around the default ".o" module format for 2.2/2.4 modules (you have probably noticed it is now .ko in 2.6 ;-)) Trying to steal as little space as possible if 2.6 not enabled... The modprobe is still not perfect on 2.6 - seems to be jamming on some dependencies, but works with some (to be debugged). Anyway after the patches it at least tries to work.... Will there be a 1.00-pre5 coming any time soon? Thanks, Woody
This commit is contained in:
parent
514aeabc36
commit
03d8091859
@ -282,7 +282,7 @@ extern int insmod_ng_main( int argc, char **argv);
|
|||||||
#ifndef MODUTILS_MODULE_H
|
#ifndef MODUTILS_MODULE_H
|
||||||
static const int MODUTILS_MODULE_H = 1;
|
static const int MODUTILS_MODULE_H = 1;
|
||||||
|
|
||||||
#ident "$Id: insmod.c,v 1.107 2003/12/11 01:42:13 andersen Exp $"
|
#ident "$Id: insmod.c,v 1.108 2003/12/19 21:04:19 andersen Exp $"
|
||||||
|
|
||||||
/* This file contains the structures used by the 2.0 and 2.1 kernels.
|
/* This file contains the structures used by the 2.0 and 2.1 kernels.
|
||||||
We do not use the kernel headers directly because we do not wish
|
We do not use the kernel headers directly because we do not wish
|
||||||
@ -503,7 +503,7 @@ int delete_module(const char *);
|
|||||||
#ifndef MODUTILS_OBJ_H
|
#ifndef MODUTILS_OBJ_H
|
||||||
static const int MODUTILS_OBJ_H = 1;
|
static const int MODUTILS_OBJ_H = 1;
|
||||||
|
|
||||||
#ident "$Id: insmod.c,v 1.107 2003/12/11 01:42:13 andersen Exp $"
|
#ident "$Id: insmod.c,v 1.108 2003/12/19 21:04:19 andersen Exp $"
|
||||||
|
|
||||||
/* The relocatable object is manipulated using elfin types. */
|
/* The relocatable object is manipulated using elfin types. */
|
||||||
|
|
||||||
@ -4050,6 +4050,8 @@ extern int insmod_main( int argc, char **argv)
|
|||||||
#ifdef CONFIG_FEATURE_INSMOD_LOAD_MAP
|
#ifdef CONFIG_FEATURE_INSMOD_LOAD_MAP
|
||||||
int flag_print_load_map = 0;
|
int flag_print_load_map = 0;
|
||||||
#endif
|
#endif
|
||||||
|
int k_version = 0;
|
||||||
|
struct utsname myuname;
|
||||||
|
|
||||||
/* Parse any options */
|
/* Parse any options */
|
||||||
#ifdef CONFIG_FEATURE_INSMOD_LOAD_MAP
|
#ifdef CONFIG_FEATURE_INSMOD_LOAD_MAP
|
||||||
@ -4108,12 +4110,33 @@ extern int insmod_main( int argc, char **argv)
|
|||||||
tmp = basename(tmp1);
|
tmp = basename(tmp1);
|
||||||
len = strlen(tmp);
|
len = strlen(tmp);
|
||||||
|
|
||||||
|
if (uname(&myuname) == 0) {
|
||||||
|
if (myuname.release[0] == '2') {
|
||||||
|
k_version = myuname.release[2] - '0';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_FEATURE_2_6_MODULES)
|
||||||
|
if (k_version > 4 && len > 3 && tmp[len - 3] == '.' &&
|
||||||
|
tmp[len - 2] == 'k' && tmp[len - 1] == 'o') {
|
||||||
|
len-=3;
|
||||||
|
tmp[len] = '\0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
if (len > 2 && tmp[len - 2] == '.' && tmp[len - 1] == 'o') {
|
if (len > 2 && tmp[len - 2] == '.' && tmp[len - 1] == 'o') {
|
||||||
len-=2;
|
len-=2;
|
||||||
tmp[len] = '\0';
|
tmp[len] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(CONFIG_FEATURE_2_6_MODULES)
|
||||||
|
if (k_version > 4)
|
||||||
|
bb_xasprintf(&m_fullName, "%s.ko", tmp);
|
||||||
|
else
|
||||||
|
#else
|
||||||
bb_xasprintf(&m_fullName, "%s.o", tmp);
|
bb_xasprintf(&m_fullName, "%s.o", tmp);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!m_name) {
|
if (!m_name) {
|
||||||
m_name = tmp;
|
m_name = tmp;
|
||||||
@ -4125,11 +4148,9 @@ extern int insmod_main( int argc, char **argv)
|
|||||||
/* Get a filedesc for the module. Check we we have a complete path */
|
/* Get a filedesc for the module. Check we we have a complete path */
|
||||||
if (stat(argv[optind], &st) < 0 || !S_ISREG(st.st_mode) ||
|
if (stat(argv[optind], &st) < 0 || !S_ISREG(st.st_mode) ||
|
||||||
(fp = fopen(argv[optind], "r")) == NULL) {
|
(fp = fopen(argv[optind], "r")) == NULL) {
|
||||||
struct utsname myuname;
|
|
||||||
|
|
||||||
/* Hmm. Could not open it. First search under /lib/modules/`uname -r`,
|
/* Hmm. Could not open it. First search under /lib/modules/`uname -r`,
|
||||||
* but do not error out yet if we fail to find it... */
|
* but do not error out yet if we fail to find it... */
|
||||||
if (uname(&myuname) == 0) {
|
if (k_version) { /* uname succeedd */
|
||||||
char *module_dir;
|
char *module_dir;
|
||||||
char *tmdn;
|
char *tmdn;
|
||||||
char real_module_dir[FILENAME_MAX];
|
char real_module_dir[FILENAME_MAX];
|
||||||
@ -4178,9 +4199,10 @@ extern int insmod_main( int argc, char **argv)
|
|||||||
printf("Using %s\n", m_filename);
|
printf("Using %s\n", m_filename);
|
||||||
|
|
||||||
#ifdef CONFIG_FEATURE_2_6_MODULES
|
#ifdef CONFIG_FEATURE_2_6_MODULES
|
||||||
if (create_module(NULL, 0) < 0 && errno == ENOSYS) {
|
if (k_version > 4)
|
||||||
|
{
|
||||||
optind--;
|
optind--;
|
||||||
argv[optind] = m_filename;
|
argv[optind + 1] = m_filename;
|
||||||
return insmod_ng_main(argc - optind, argv + optind);
|
return insmod_ng_main(argc - optind, argv + optind);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -57,6 +57,7 @@ struct mod_list_t {
|
|||||||
|
|
||||||
static struct dep_t *depend;
|
static struct dep_t *depend;
|
||||||
static int autoclean, show_only, quiet, do_syslog, verbose;
|
static int autoclean, show_only, quiet, do_syslog, verbose;
|
||||||
|
static int k_version;
|
||||||
|
|
||||||
int parse_tag_value ( char *buffer, char **ptag, char **pvalue )
|
int parse_tag_value ( char *buffer, char **ptag, char **pvalue )
|
||||||
{
|
{
|
||||||
@ -116,6 +117,7 @@ static struct dep_t *build_dep ( void )
|
|||||||
char *filename = buffer;
|
char *filename = buffer;
|
||||||
int continuation_line = 0;
|
int continuation_line = 0;
|
||||||
|
|
||||||
|
k_version = 0;
|
||||||
if ( uname ( &un ))
|
if ( uname ( &un ))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -123,6 +125,9 @@ static struct dep_t *build_dep ( void )
|
|||||||
if ( bb_strlen ( un.release ) > ( sizeof( buffer ) - 64 )) {
|
if ( bb_strlen ( un.release ) > ( sizeof( buffer ) - 64 )) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
if (un.release[0] == '2') {
|
||||||
|
k_version = un.release[2] - '0';
|
||||||
|
}
|
||||||
|
|
||||||
strcpy ( filename, "/lib/modules/" );
|
strcpy ( filename, "/lib/modules/" );
|
||||||
strcat ( filename, un.release );
|
strcat ( filename, un.release );
|
||||||
@ -166,6 +171,12 @@ static struct dep_t *build_dep ( void )
|
|||||||
else
|
else
|
||||||
mods++;
|
mods++;
|
||||||
|
|
||||||
|
#if defined(CONFIG_FEATURE_2_6_MODULES)
|
||||||
|
if ((k_version > 4) && ( *(col-3) == '.' ) &&
|
||||||
|
( *(col-2) == 'k' ) && ( *(col-1) == 'o' ))
|
||||||
|
ext = 3;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
if (( *(col-2) == '.' ) && ( *(col-1) == 'o' ))
|
if (( *(col-2) == '.' ) && ( *(col-1) == 'o' ))
|
||||||
ext = 2;
|
ext = 2;
|
||||||
|
|
||||||
@ -215,6 +226,12 @@ static struct dep_t *build_dep ( void )
|
|||||||
else
|
else
|
||||||
deps++;
|
deps++;
|
||||||
|
|
||||||
|
#if defined(CONFIG_FEATURE_2_6_MODULES)
|
||||||
|
if ((k_version > 4) && ( *(end-2) == '.' ) && *(end-1) == 'k' &&
|
||||||
|
( *end == 'o' ))
|
||||||
|
ext = 3;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
if (( *(end-1) == '.' ) && ( *end == 'o' ))
|
if (( *(end-1) == '.' ) && ( *end == 'o' ))
|
||||||
ext = 2;
|
ext = 2;
|
||||||
|
|
||||||
@ -383,6 +400,13 @@ static void check_dep ( char *mod, struct mod_list_t **head, struct mod_list_t *
|
|||||||
|
|
||||||
// remove .o extension
|
// remove .o extension
|
||||||
lm = bb_strlen ( mod );
|
lm = bb_strlen ( mod );
|
||||||
|
|
||||||
|
#if defined(CONFIG_FEATURE_2_6_MODULES)
|
||||||
|
if ((k_version > 4) && ( mod [lm-3] == '.' ) &&
|
||||||
|
( mod [lm-2] == 'k' ) && ( mod [lm-1] == 'o' ))
|
||||||
|
mod [lm-3] = 0;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
if (( mod [lm-2] == '.' ) && ( mod [lm-1] == 'o' ))
|
if (( mod [lm-2] == '.' ) && ( mod [lm-1] == 'o' ))
|
||||||
mod [lm-2] = 0;
|
mod [lm-2] = 0;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user