LinuxQuestions.org
LinuxAnswers - the LQ Linux tutorial section.
Go Back   LinuxQuestions.org > Forums > Linux Forums > Linux - Hardware > Linux - Embedded & Single-board computer
User Name
Password
Linux - Embedded & Single-board computer This forum is for the discussion of Linux on both embedded devices and single-board computers (such as the Raspberry Pi, BeagleBoard and PandaBoard). Discussions involving Arduino, plug computers and other micro-controller like devices are also welcome.

Notices

Reply
 
LinkBack Search this Thread
Old 10-03-2012, 06:15 AM   #1
bhas.445@gmail.com
LQ Newbie
 
Registered: Sep 2012
Posts: 3

Rep: Reputation: Disabled
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
 
Old 10-03-2012, 07:44 AM   #2
pixellany
LQ Veteran
 
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Arch/XFCE
Posts: 17,802

Rep: Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728
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.
 
Old 10-03-2012, 08:06 AM   #3
bhas.445@gmail.com
LQ Newbie
 
Registered: Sep 2012
Posts: 3

Original Poster
Rep: Reputation: Disabled
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..

Last edited by bhas.445@gmail.com; 10-03-2012 at 08:14 AM.
 
Old 10-03-2012, 01:48 PM   #4
pixellany
LQ Veteran
 
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Arch/XFCE
Posts: 17,802

Rep: Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728
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........ )
 
Old 10-03-2012, 11:40 PM   #5
bhas.445@gmail.com
LQ Newbie
 
Registered: Sep 2012
Posts: 3

Original Poster
Rep: Reputation: Disabled
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....

Last edited by bhas.445@gmail.com; 10-03-2012 at 11:52 PM.
 
Old 10-04-2012, 08:02 AM   #6
pixellany
LQ Veteran
 
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Arch/XFCE
Posts: 17,802

Rep: Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728Reputation: 728
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
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Error 502 : Display Fatal Error Message, Error pushing image, dbpaCT failed! HaloCheng Linux - Newbie 1 09-12-2012 12:02 PM
[SOLVED] Google-Chrome Error (Error 9 (net::ERR_UNEXPECTED): Unknown error) smoooth103 Slackware 4 12-04-2010 07:42 PM
[SOLVED] php5 ./configure error: (FILENAME=- FNR=27) fatal error: internal error richinsc Linux - Software 2 07-08-2010 09:20 AM
Memory error: extended error chipkill ecc error rajivdp Linux - Hardware 1 12-07-2009 08:26 AM
Sendmail: eocket wedge , 504 error , dsn error, mail relay connection error djcs Debian 0 03-03-2009 12:41 AM


All times are GMT -5. The time now is 12:57 PM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration