LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Embedded & Single-board computer (https://www.linuxquestions.org/questions/linux-embedded-and-single-board-computer-78/)
-   -   Error (https://www.linuxquestions.org/questions/linux-embedded-and-single-board-computer-78/error-4175430258/)

bhas.445@gmail.com 10-03-2012 06:15 AM

Error
 
Hi
please help me in solving the following error

/home/sohamsaa/Project/android_u-boot/common/cmd_spear1340_test.c:147: undefined reference to `mmc_legacy_init'
/home/sohamsaa/Project/android_u-boot/common/cmd_spear1340_test.c:166: undefined reference to `print_mmcinfo'
make: *** [u-boot] Error 1

pixellany 10-03-2012 07:44 AM

You don't give any context, but we can guess that you are using "make" to compile something. The error messages speak for themselves. You are using 2 names that are not defined in a header file, library, etc. to go further, we'd need to know what you are compiling, where you got the headers and libraries, etc.

bhas.445@gmail.com 10-03-2012 08:06 AM

Thank you for your reply..
i am compiling u-boot to create an image.....here is the case

i am using the following headerfiles
#include<common.h>
#include<command.h>
#include<mmc.h>

i am calling the following functions in my code
mmc_legacy_init(dev);
and
print_mmcinfo(mmc);

i am compiling it using the following commands
make ARCH=arm CROSS_COMPILE=armv7-linux- mrproper
make ARCH=arm CROSS_COMPILE=armv7-linux- spear1340_config
make ARCH=arm CROSS_COMPILE=armv7-linux-



i am getting the error mentioned in previous post..

pixellany 10-03-2012 01:48 PM

first, are those names in the header files you mentioned? (eg, is it possible you just misspelled something?)

If there is not some simple spelling error, my next question would be: Where did you get the names you are using? If, for example, you had started with existing code, there should be somewhere some documentation as to what headers/libraries are needed.

My vision of the ideal programmer: Every time he/she calls a library function, macro, etc., he/she knows which file it's in. (I never MET this ideal programmer........;) )

bhas.445@gmail.com 10-03-2012 11:40 PM

I am using the existing code given below, and calling those 2 functions......

/*
* (C) Copyright 2003
* Kyle Harris, kharris@nexus-tech.net
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/

#include <common.h>
#include <command.h>
#include <mmc.h>

#ifndef CONFIG_GENERIC_MMC
static int curr_device = -1;

int do_mmc (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int dev;

if (argc < 2) {
cmd_usage(cmdtp);
return 1;
}
if (strcmp(argv[1], "init") == 0) {
if (argc == 2) {
if (curr_device < 0)
dev = 1;
else
dev = curr_device;
} else if (argc == 3) {
dev = (int)simple_strtoul(argv[2], NULL, 10);
} else {
cmd_usage(cmdtp);
return 1;
}

if (mmc_legacy_init(dev)!= 0) {
puts("No MMC card found\n");
return 1;
}

curr_device = dev;
printf("mmc%d is available\n", curr_device);
} else if (strcmp(argv[1], "device") == 0) {
if (argc == 2) {
if (curr_device < 0) {
puts("No MMC device available\n");
return 1;
}
} else if (argc == 3) {
dev = (int)simple_strtoul(argv[2], NULL, 10);

#ifdef CONFIG_SYS_MMC_SET_DEV
if (mmc_set_dev(dev) != 0)
return 1;
#endif
curr_device = dev;
} else {
cmd_usage(cmdtp);
return 1;
}

printf("mmc%d is current device\n", curr_device);
} else {
cmd_usage(cmdtp);
return 1;
}

return 0;
}

U_BOOT_CMD(
mmc, 3, 1, do_mmc,
"MMC sub-system",
"init [dev] - init MMC sub system\n"
"mmc device [dev] - show or set current device"
);
#else /* !CONFIG_GENERIC_MMC */

static void print_mmcinfo(struct mmc *mmc)
{
printf("Device: %s\n", mmc->name);
printf("Manufacturer ID: %x\n", mmc->cid[0] >> 24);
printf("OEM: %x\n", (mmc->cid[0] >> 8) & 0xffff);
printf("Name: %c%c%c%c%c \n", mmc->cid[0] & 0xff,
(mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
(mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);

printf("Tran Speed: %d\n", mmc->tran_speed);
printf("Rd Block Len: %d\n", mmc->read_bl_len);

printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
(mmc->version >> 4) & 0xf, mmc->version & 0xf);

printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
printf("Capacity: %lld\n", mmc->capacity);

printf("Bus Width: %d-bit\n", mmc->bus_width);
}

int do_mmcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
struct mmc *mmc;
int dev_num;

if (argc < 2)
dev_num = 0;
else
dev_num = simple_strtoul(argv[1], NULL, 0);

mmc = find_mmc_device(dev_num);

if (mmc) {
mmc_init(mmc);

print_mmcinfo(mmc);
}

return 0;
}

U_BOOT_CMD(mmcinfo, 2, 0, do_mmcinfo,
"mmcinfo <dev num>-- display MMC info",
""
);

int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
int rc = 0;

switch (argc) {
case 3:
if (strcmp(argv[1], "rescan") == 0) {
int dev = simple_strtoul(argv[2], NULL, 10);
struct mmc *mmc = find_mmc_device(dev);

if (!mmc)
return 1;

mmc_init(mmc);

return 0;
}

case 0:
case 1:
case 4:
printf("Usage:\n%s\n", cmdtp->usage);
return 1;

case 2:
if (!strcmp(argv[1], "list")) {
print_mmc_devices('\n');
return 0;
}
return 1;
default: /* at least 5 args */
if (strcmp(argv[1], "read") == 0) {
int dev = simple_strtoul(argv[2], NULL, 10);
void *addr = (void *)simple_strtoul(argv[3], NULL, 16);
u32 cnt = simple_strtoul(argv[5], NULL, 16);
u32 n;
u32 blk = simple_strtoul(argv[4], NULL, 16);
struct mmc *mmc = find_mmc_device(dev);

if (!mmc)
return 1;

printf("\nMMC read: dev # %d, block # %d, count %d ... ",
dev, blk, cnt);

mmc_init(mmc);

n = mmc->block_dev.block_read(dev, blk, cnt, addr);

/* flush cache after read */
flush_cache((ulong)addr, cnt * 512); /* FIXME */

printf("%d blocks read: %s\n",
n, (n==cnt) ? "OK" : "ERROR");
return (n == cnt) ? 0 : 1;
} else if (strcmp(argv[1], "write") == 0) {
int dev = simple_strtoul(argv[2], NULL, 10);
void *addr = (void *)simple_strtoul(argv[3], NULL, 16);
u32 cnt = simple_strtoul(argv[5], NULL, 16);
u32 n;
struct mmc *mmc = find_mmc_device(dev);

int blk = simple_strtoul(argv[4], NULL, 16);

if (!mmc)
return 1;

printf("\nMMC write: dev # %d, block # %d, count %d ... ",
dev, blk, cnt);

mmc_init(mmc);

n = mmc->block_dev.block_write(dev, blk, cnt, addr);

printf("%d blocks written: %s\n",
n, (n == cnt) ? "OK" : "ERROR");
return (n == cnt) ? 0 : 1;
} else {
printf("Usage:\n%s\n", cmdtp->usage);
rc = 1;
}

return rc;
}
}

U_BOOT_CMD(
mmc, 6, 1, do_mmcops,
"MMC sub system",
"read <device num> addr blk# cnt\n"
"mmc write <device num> addr blk# cnt\n"
"mmc rescan <device num>\n"
"mmc list - lists available devices");
#endif




if i search for the function from which file he is using, i got...

root@sohamsaa:/home/sohamsaa/Project/android_u-boot# grep -r "mmc_legacy_init" *

arch/arm/cpu/arm720t/lpc2292/mmc.c:int mmc_legacy_init(int verbose)
arch/arm/cpu/arm720t/lpc2292/mmc.c: printf("mmc_legacy_init\n");
CHANGELOG: ARM:OMAP3 Change mmc_init to mmc_legacy_init
CHANGELOG: omap3_mmc.c was changed to define mmc_legacy_init.
CHANGELOG: Convert mmc_init to mmc_legacy_init
Binary file common/cmd_spear1340_test.o matches
common/cmd_spear1340_test.c: if (mmc_legacy_init(dev) != 0)
Binary file common/.cmd_spear1340_test.c.swp matches
Binary file common/libcommon.a matches
common/cmd_mmc.c: if (mmc_legacy_init(dev) != 0) {
drivers/mmc/omap3_mmc.c:int mmc_legacy_init(int verbose)
drivers/mmc/atmel_mci.c:int mmc_legacy_init(int verbose)
drivers/mmc/pxa_mmc.c:mmc_legacy_init(int verbose)
include/mmc.h:int mmc_legacy_init(int verbose);

i am not getting which function he used there....

pixellany 10-04-2012 08:02 AM

It seems you are making progress....the header file "mmc.h" has one of your names in it---now you need to track down why your program still spits out that error. I'd start by reading the actual code in mmc.h---maybe something is commented out?

Did you try searching for the other name that showed up in the error messages?

You haven't said where you got this code or if there was any documentation.

Finally, please put code into [CODE] tags


All times are GMT -5. The time now is 08:13 AM.