Hello from Gregg C Levine It should work indeed. However, I've got a strange series of problems that might be related to my distribution's choice of versions, and I'll post the script output here in this message. However, it will be a long one. I think some of these problems might be related to the distribution you chose, Steven, whose is it, and what's the version on it? Mine is Slackware 9.1, which came with those versions of tools. (Script output follows.) That's the versions of my GCC, and binary tools.:
Script started on Sat May 8 12:59:30 2004 root@who5:/# gcc --version gcc (GCC) 3.2.3 Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@who5:/# ld --version GNU ld version 2.14.90.0.6 20030820 Copyright 2002 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. root@who5:/# exit Script done on Sat May 8 12:59:46 2004
This one is from the library for the bare metal project: Script started on Sat May 8 12:47:01 2004 root@who5:/usr/src/lobos/freebios/util/baremetal/lib# make gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/printk.c gcc -I ../include -I ../include/i386 -O2 -c -o serial_subr.o serial_subr.c gcc -I ../include -I ../include/i386 -O2 -c -o subr.o subr.c In file included from subr.c:16: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/vsprintf.c In file included from ../../../src/lib/vsprintf.c:18: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/memcpy.c In file included from ../../../src/lib/memcpy.c:1: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/malloc.c gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/memset.c In file included from ../../../src/lib/memset.c:1: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/compute_ip_checksum.c gcc -I ../include -I ../include/i386 -O2 -c -o elfboot.o elfboot.c In file included from elfboot.c:8: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c -o boot.o boot.c In file included from boot.c:4: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/pc80/ide/ide.c In file included from ../../../src/pc80/ide/ide.c:26: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' ../../../src/pc80/ide/ide.c:27:19: delay.h: No such file or directory ../../../src/pc80/ide/ide.c:28:17: pci.h: No such file or directory ../../../src/pc80/ide/ide.c:33: conflicting types for `harddisk_info' ../include/pc80/ide.h:54: previous declaration of `harddisk_info' ../../../src/pc80/ide/ide.c: In function `not_bsy': ../../../src/pc80/ide/ide.c:59: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:59: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:59: `IDE_STATUS_BSY' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:59: (Each undeclared identifier is reported only once ../../../src/pc80/ide/ide.c:59: for each function it appears in.) ../../../src/pc80/ide/ide.c: In function `ide_software_reset': ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_HD15' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_SRST' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_NIEN' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:95: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c:95: warning: its scope is only this definition or declaration, which is probably not what you want ../../../src/pc80/ide/ide.c: In function `pio_set_registers': ../../../src/pc80/ide/ide.c:97: `uint8_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:97: syntax error before "device" ../../../src/pc80/ide/ide.c:99: `IDE_CTRL_HD15' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:99: `IDE_CTRL_NIEN' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:102: `device' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:103: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:104: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:111: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:112: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:112: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:112: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:113: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:113: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:113: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:114: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:115: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:116: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:117: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:118: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:119: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:120: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:120: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:120: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:124: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c: In function `pio_non_data': ../../../src/pc80/ide/ide.c:131: warning: passing arg 2 of `pio_set_registers' from incompatible pointer type ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:140: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c: In function `pio_data_in': ../../../src/pc80/ide/ide.c:151: warning: passing arg 2 of `pio_set_registers' from incompatible pointer type ../../../src/pc80/ide/ide.c:155: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:155: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:156: `IDE_STATUS_DRQ' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:159: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:159: warning: passing arg 1 of `insw' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:160: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:160: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:161: `IDE_STATUS_ERR' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `ide_read_sector_chs': ../../../src/pc80/ide/ide.c:170: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:178: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:180: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:181: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:186: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:187: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:189: `IDE_CMD_READ_SECTORS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:190: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: In function `ide_read_sector_lba': ../../../src/pc80/ide/ide.c:196: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:205: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:207: `IDE_CMD_READ_SECTORS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:208: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:212: syntax error before "sector_t" ../../../src/pc80/ide/ide.c: In function `ide_read_sector_lba48': ../../../src/pc80/ide/ide.c:214: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:218: `sector' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:224: `info' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:225: `IDE_CMD_READ_SECTORS_EXT' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:226: `buffer' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `ide_read_sector': ../../../src/pc80/ide/ide.c:232: invalid use of undefined type `struct harddisk_info' ../../../src/pc80/ide/ide.c:236: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:239: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:239: `ADDRESS_MODE_CHS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:242: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:242: `ADDRESS_MODE_LBA' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:245: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:245: `ADDRESS_MODE_LBA48' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `init_drive': ../../../src/pc80/ide/ide.c:256: `uint16_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:256: `drive_info' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:257: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:258: `DISK_BUFFER_SIZE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:261: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:262: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:263: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:264: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:265: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:266: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:267: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:268: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:269: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:270: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:272: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:275: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:283: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:286: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:291: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:294: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:299: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:302: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:303: `IDE_CMD_IDENTIFY_DEVICE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:313: syntax error before ')' token ../../../src/pc80/ide/ide.c:318: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:319: `IDE_FEATURE_STANDBY_SPINUP_DRIVE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:330: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:346: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:347: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:349: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:350: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:354: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:354: `ADDRESS_MODE_LBA' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:355: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:360: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:360: `ADDRESS_MODE_LBA48' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:361: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:362: `sector_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:362: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:363: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:364: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:365: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:368: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:368: `ADDRESS_MODE_CHS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:369: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:370: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:371: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:372: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:373: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:374: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:375: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:383: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:384: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:390: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:391: `IDE_FEATURE_CFA_ENABLE_POWER_MODE1' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:403: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:403: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: In function `init_controller': ../../../src/pc80/ide/ide.c:457: invalid use of undefined type `struct harddisk_info' ../../../src/pc80/ide/ide.c: In function `ide_init': ../../../src/pc80/ide/ide.c:478: sizeof applied to an incomplete type ../../../src/pc80/ide/ide.c:498: `uint16_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:498: syntax error before "base" ../../../src/pc80/ide/ide.c:499: `base' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:499: `IDE_BASE0' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:500: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:501: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:503: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:503: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:33: storage size of `harddisk_info' isn't known ../../../src/pc80/ide/ide.c:32: storage size of `controller' isn't known make: *** [ide.o] Error 1 root@who5:/usr/src/lobos/freebios/util/baremetal/lib# exit Script done on Sat May 8 12:47:09 2004
And this one is from the USB directory: Script started on Sat May 8 12:44:02 2004 root@who5:/usr/src/lobos/freebios/util/baremetal/usb# make gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o uhci.o uhci.c uhci.c:332:1: warning: "USBCMD" redefined In file included from uhci.c:39: uhci.h:290:1: warning: this is the location of the previous definition uhci.c:333:1: warning: "USBSTS" redefined uhci.h:291:1: warning: this is the location of the previous definition uhci.c:334:1: warning: "USBINTR" redefined uhci.h:292:1: warning: this is the location of the previous definition uhci.c:335:1: warning: "FRNUM" redefined uhci.h:293:1: warning: this is the location of the previous definition uhci.c:336:1: warning: "FLBASE" redefined uhci.h:294:1: warning: this is the location of the previous definition uhci.c:337:1: warning: "SOFMOD" redefined uhci.h:295:1: warning: this is the location of the previous definition uhci.c:338:1: warning: "PORTSC1" redefined uhci.h:296:1: warning: this is the location of the previous definition uhci.c:339:1: warning: "PORTSC2" redefined uhci.h:297:1: warning: this is the location of the previous definition uhci.c: In function `ctrl_msg': uhci.c:776: warning: assignment makes pointer from integer without a cast uhci.c: In function `hub_port_reset': uhci.c:1193: warning: passing arg 1 of `dump_hex' from incompatible pointer type uhci.c: In function `usb_hub_init': uhci.c:1272: warning: assignment makes pointer from integer without a cast uhci.c: In function `configure_device': uhci.c:1383: warning: passing arg 1 of `dump_config_descriptor' from incompatible pointer type gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o usb_scsi_low.o usb_scsi_low.c gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o debug.o debug.c In file included from debug.c:31: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o scsi_cmds.o scsi_cmds.c scsi_cmds.c: In function `ll_read_block': scsi_cmds.c:258: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ll_write_block': scsi_cmds.c:280: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ll_read_long': scsi_cmds.c:311: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `get_capacity': scsi_cmds.c:328: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `query': scsi_cmds.c:349: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ReportLUNS': scsi_cmds.c:372: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ReportOpCodes': scsi_cmds.c:423: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c:423: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `CheckVolumes': scsi_cmds.c:469: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `CheckPartitions': scsi_cmds.c:494: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `UnitReady': scsi_cmds.c:514: warning: passing arg 2 of `scsi_command' from incompatible pointer type gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o pci_util.o pci_util.c gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o block_fill_inbuf.o block_fill_inbuf.c In file included from block_fill_inbuf.c:8: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o main.o main.c main.c: In function `main': main.c:41: warning: assignment makes pointer from integer without a cast ld -defsym HEAPSIZE=0x8000 -T elfImage.lds main.o uhci.o usb_scsi_low.o debug.o scsi_cmds.o pci_util.o block_fill_inbuf.o ../lib/baremetal.a -o usbboot.elf uhci.o(.text+0x5e): In function `wait_head': : undefined reference to `udelay' uhci.o(.text+0x70a): In function `port_resume': : undefined reference to `udelay' uhci.o(.text+0x7c2): In function `port_reset': : undefined reference to `udelay' uhci.o(.text+0x819): In function `port_reset_long': : undefined reference to `udelay' uhci.o(.text+0x875): In function `hc_reset': : undefined reference to `udelay' uhci.o(.text+0xcdf): more undefined references to `udelay' follow make: *** [usbboot.elf] Error 1 root@who5:/usr/src/lobos/freebios/util/baremetal/usb# exit Script done on Sat May 8 12:44:16 2004
-------------------- Gregg C Levine hansolofalcon@worldnet.att.net ------------------------------------------------------------ "The Force will be with you...Always." Obi-Wan Kenobi "Use the Force, Luke." Obi-Wan Kenobi
-----Original Message----- From: Yinghai Lu [mailto:yhlu@tyan.com] Sent: Saturday, May 08, 2004 12:48 PM To: 'Steven James'; 'Gregg C Levine' Cc: linuxbios@clustermatic.org Subject: re: Is possible Linux on flash memory?
Does it work now?
If it works with raw device, after merge it into filo, it should use file system FAT etc.
Regards
YH
-----邮件原件----- å‘件人: linuxbios-admin@clustermatic.org [mailto:linuxbios- admin@clustermatic.org] 代表 Steven James å‘é€æ—¶é—´: 2004å¹´5月8æ—¥ 5:18 收件人: Gregg C Levine 抄é€: linuxbios@clustermatic.org 主题: RE: Is possible Linux on flash memory?
Greetings,
Yes, a kernel processed with Eric's mkelfImage.
I don't have any filesystem code in the loader, so rather than mounting a filesystem on the USB storage device, you need to partition it and then dd the kernel image to the first partition.
e.g. if your USB device shows up as sdb, dd if=kernel.elf of=/dev/sdb1
G'day, sjames
-------------------------steven james, director of research, linux labs ... ........ ..... .... 230 peachtree st nw ste 2701 the original linux labs atlanta.ga.us 30303 -since 1995 http://www.linuxlabs.com office & fax 866.545.6306
On Sat, 8 May 2004, Gregg C Levine wrote:
Hello from Gregg C Levine It happens I just finished examining the code for the contents of that directory. But I've got just one question pending at the moment, how do you mean, "It will actually load an ELF image written to the raw device.". Explain that line of reasoning. Do you mean a kernel that's been pushed through the creation tool that Eric has created? And "raw device", now I'm lost, how about clarifying your position?
Gregg C Levine hansolofalcon@worldnet.att.net
"The Force will be with you...Always." Obi-Wan Kenobi "Use the Force, Luke." Obi-Wan Kenobi
-----Original Message----- From: linuxbios-admin@clustermatic.org [mailto:linuxbios- admin@clustermatic.org] On Behalf Of Steven James Sent: Friday, May 07, 2004 11:20 PM To: Ken Fuchs Cc: linuxbios@clustermatic.org Subject: Re: Is possible Linux on flash memory?
Greetings,
I've checked in the start of USB booting in util/baremetal/usb. It will actually load an ELF image written to the raw device. I
haven't
been able to find enough time yet to integrate it into FILO, but it
should
probably go there.
G'day, sjames
-------------------------steven james, director of research, linux
labs
... ........ ..... .... 230 peachtree st nw ste
2701
the original linux labs atlanta.ga.us
30303
-since 1995
office & fax
866.545.6306
On Fri, 7 May 2004, Ken Fuchs wrote:
LinuxBIOS doesn't support USB pen drives or USB compact flash. It
does
support ATA (IDE) flash devices.
On a normal (proprietary) BIOS:
Booting from USB is supported on many newer motherboards with a
BIOS
that supports this. I use Flonix to boot from a 64MB USB pen
drive:
The Flonix forums are at:
http://www.flonix.com/support/viewforum.php?f=11
I also tried Puppy Linux (http.goosee.com/puppy/), but the USB bootloader (syslinux 2.08) didn't work for me. Using Knoppix 3.3 2-16-2004, I was able to install it's syslinux 2.04 bootloader:
# syslinux /dev/sda1
To make Flonix bootable, you can also use the above command from the Knoppix live CD.
(The first USB flash is /dev/sda, if there are _no_ SCSI drives. Otherwise, USB flash is the last "SCSI" device, i.e. /dev/sdc with
two
SCSI hard drives with special files /dev/sda and /dev/sdb.)
There are other Linux distributions built to be installed on a USB
pen
drive or flash.
Check out http://www.linux-usb.org/ for general Linux USB
information.
BTW, I sent Flavio a private e-mail to flavio_groups@yahoo.com.br
and it
bounced. So, I'm forced to answer via the LinuxBIOS mailing list. Sorry.
Sincerely,
Ken Fuchs kfuchs@winternet.com
Greetings,
It looks like the IDE stuff is the result of things changing in the linuxbios source since baremetal was checked in.
I'll have to look at the usb problems. My setup was with gcc 2.95. I'll try it on my newer gcc 3.2.2 (RH 9 ish) and see what's up.
G'day, sjames
-----steven james, director of research, linux labs ... ........ ..... .... 230 peachtree st nw ste 2701 the original linux labs atlanta.ga.us 30303 -since 1995 http://www.linuxlabs.com office & fax 866.545.6306 -----------------------------------------------------------------------
On Sat, 8 May 2004, Gregg C Levine wrote:
Hello from Gregg C Levine It should work indeed. However, I've got a strange series of problems that might be related to my distribution's choice of versions, and I'll post the script output here in this message. However, it will be a long one. I think some of these problems might be related to the distribution you chose, Steven, whose is it, and what's the version on it? Mine is Slackware 9.1, which came with those versions of tools. (Script output follows.) That's the versions of my GCC, and binary tools.:
Script started on Sat May 8 12:59:30 2004 root@who5:/# gcc --version gcc (GCC) 3.2.3 Copyright (C) 2002 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
root@who5:/# ld --version GNU ld version 2.14.90.0.6 20030820 Copyright 2002 Free Software Foundation, Inc. This program is free software; you may redistribute it under the terms of the GNU General Public License. This program has absolutely no warranty. root@who5:/# exit Script done on Sat May 8 12:59:46 2004
This one is from the library for the bare metal project: Script started on Sat May 8 12:47:01 2004 root@who5:/usr/src/lobos/freebios/util/baremetal/lib# make gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/printk.c gcc -I ../include -I ../include/i386 -O2 -c -o serial_subr.o serial_subr.c gcc -I ../include -I ../include/i386 -O2 -c -o subr.o subr.c In file included from subr.c:16: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/vsprintf.c In file included from ../../../src/lib/vsprintf.c:18: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/memcpy.c In file included from ../../../src/lib/memcpy.c:1: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/malloc.c gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/memset.c In file included from ../../../src/lib/memset.c:1: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/lib/compute_ip_checksum.c gcc -I ../include -I ../include/i386 -O2 -c -o elfboot.o elfboot.c In file included from elfboot.c:8: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c -o boot.o boot.c In file included from boot.c:4: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -c ../../../src/pc80/ide/ide.c In file included from ../../../src/pc80/ide/ide.c:26: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' ../../../src/pc80/ide/ide.c:27:19: delay.h: No such file or directory ../../../src/pc80/ide/ide.c:28:17: pci.h: No such file or directory ../../../src/pc80/ide/ide.c:33: conflicting types for `harddisk_info' ../include/pc80/ide.h:54: previous declaration of `harddisk_info' ../../../src/pc80/ide/ide.c: In function `not_bsy': ../../../src/pc80/ide/ide.c:59: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:59: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:59: `IDE_STATUS_BSY' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:59: (Each undeclared identifier is reported only once ../../../src/pc80/ide/ide.c:59: for each function it appears in.) ../../../src/pc80/ide/ide.c: In function `ide_software_reset': ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_HD15' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_SRST' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:83: `IDE_CTRL_NIEN' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:95: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c:95: warning: its scope is only this definition or declaration, which is probably not what you want ../../../src/pc80/ide/ide.c: In function `pio_set_registers': ../../../src/pc80/ide/ide.c:97: `uint8_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:97: syntax error before "device" ../../../src/pc80/ide/ide.c:99: `IDE_CTRL_HD15' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:99: `IDE_CTRL_NIEN' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:102: `device' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:103: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:104: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:111: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:112: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:112: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:112: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:113: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:113: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:113: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:114: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:115: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:116: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:117: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:118: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:119: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:120: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:120: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:120: warning: passing arg 2 of `outb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:124: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c: In function `pio_non_data': ../../../src/pc80/ide/ide.c:131: warning: passing arg 2 of `pio_set_registers' from incompatible pointer type ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:140: warning: `struct ide_pio_command' declared inside parameter list ../../../src/pc80/ide/ide.c: In function `pio_data_in': ../../../src/pc80/ide/ide.c:151: warning: passing arg 2 of `pio_set_registers' from incompatible pointer type ../../../src/pc80/ide/ide.c:155: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:155: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:156: `IDE_STATUS_DRQ' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:159: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:159: warning: passing arg 1 of `insw' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:160: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:160: warning: passing arg 1 of `inb' makes integer from pointer without a cast ../../../src/pc80/ide/ide.c:161: `IDE_STATUS_ERR' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `ide_read_sector_chs': ../../../src/pc80/ide/ide.c:170: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:178: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:180: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:181: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:186: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:187: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:189: `IDE_CMD_READ_SECTORS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:190: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: In function `ide_read_sector_lba': ../../../src/pc80/ide/ide.c:196: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:205: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:207: `IDE_CMD_READ_SECTORS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:208: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:212: syntax error before "sector_t" ../../../src/pc80/ide/ide.c: In function `ide_read_sector_lba48': ../../../src/pc80/ide/ide.c:214: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:218: `sector' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:224: `info' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:225: `IDE_CMD_READ_SECTORS_EXT' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:226: `buffer' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `ide_read_sector': ../../../src/pc80/ide/ide.c:232: invalid use of undefined type `struct harddisk_info' ../../../src/pc80/ide/ide.c:236: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:239: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:239: `ADDRESS_MODE_CHS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:242: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:242: `ADDRESS_MODE_LBA' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:245: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:245: `ADDRESS_MODE_LBA48' undeclared (first use in this function) ../../../src/pc80/ide/ide.c: In function `init_drive': ../../../src/pc80/ide/ide.c:256: `uint16_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:256: `drive_info' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:257: storage size of `cmd' isn't known ../../../src/pc80/ide/ide.c:258: `DISK_BUFFER_SIZE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:261: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:262: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:263: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:264: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:265: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:266: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:267: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:268: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:269: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:270: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:272: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:275: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:283: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:286: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:291: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:294: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:299: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:302: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:303: `IDE_CMD_IDENTIFY_DEVICE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:313: syntax error before ')' token ../../../src/pc80/ide/ide.c:318: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:319: `IDE_FEATURE_STANDBY_SPINUP_DRIVE' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:330: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:346: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:347: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:349: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:350: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:354: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:354: `ADDRESS_MODE_LBA' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:355: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:360: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:360: `ADDRESS_MODE_LBA48' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:361: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:362: `sector_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:362: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:363: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:364: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:365: syntax error before "drive_info" ../../../src/pc80/ide/ide.c:368: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:368: `ADDRESS_MODE_CHS' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:369: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:370: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:371: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:372: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:373: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:374: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:375: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:380: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:383: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:384: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:390: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:391: `IDE_FEATURE_CFA_ENABLE_POWER_MODE1' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:403: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c:403: dereferencing pointer to incomplete type ../../../src/pc80/ide/ide.c: In function `init_controller': ../../../src/pc80/ide/ide.c:457: invalid use of undefined type `struct harddisk_info' ../../../src/pc80/ide/ide.c: In function `ide_init': ../../../src/pc80/ide/ide.c:478: sizeof applied to an incomplete type ../../../src/pc80/ide/ide.c:498: `uint16_t' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:498: syntax error before "base" ../../../src/pc80/ide/ide.c:499: `base' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:499: `IDE_BASE0' undeclared (first use in this function) ../../../src/pc80/ide/ide.c:500: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:501: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:503: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c:503: invalid use of undefined type `struct controller' ../../../src/pc80/ide/ide.c: At top level: ../../../src/pc80/ide/ide.c:33: storage size of `harddisk_info' isn't known ../../../src/pc80/ide/ide.c:32: storage size of `controller' isn't known make: *** [ide.o] Error 1 root@who5:/usr/src/lobos/freebios/util/baremetal/lib# exit Script done on Sat May 8 12:47:09 2004
And this one is from the USB directory: Script started on Sat May 8 12:44:02 2004 root@who5:/usr/src/lobos/freebios/util/baremetal/usb# make gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o uhci.o uhci.c uhci.c:332:1: warning: "USBCMD" redefined In file included from uhci.c:39: uhci.h:290:1: warning: this is the location of the previous definition uhci.c:333:1: warning: "USBSTS" redefined uhci.h:291:1: warning: this is the location of the previous definition uhci.c:334:1: warning: "USBINTR" redefined uhci.h:292:1: warning: this is the location of the previous definition uhci.c:335:1: warning: "FRNUM" redefined uhci.h:293:1: warning: this is the location of the previous definition uhci.c:336:1: warning: "FLBASE" redefined uhci.h:294:1: warning: this is the location of the previous definition uhci.c:337:1: warning: "SOFMOD" redefined uhci.h:295:1: warning: this is the location of the previous definition uhci.c:338:1: warning: "PORTSC1" redefined uhci.h:296:1: warning: this is the location of the previous definition uhci.c:339:1: warning: "PORTSC2" redefined uhci.h:297:1: warning: this is the location of the previous definition uhci.c: In function `ctrl_msg': uhci.c:776: warning: assignment makes pointer from integer without a cast uhci.c: In function `hub_port_reset': uhci.c:1193: warning: passing arg 1 of `dump_hex' from incompatible pointer type uhci.c: In function `usb_hub_init': uhci.c:1272: warning: assignment makes pointer from integer without a cast uhci.c: In function `configure_device': uhci.c:1383: warning: passing arg 1 of `dump_config_descriptor' from incompatible pointer type gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o usb_scsi_low.o usb_scsi_low.c gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o debug.o debug.c In file included from debug.c:31: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o scsi_cmds.o scsi_cmds.c scsi_cmds.c: In function `ll_read_block': scsi_cmds.c:258: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ll_write_block': scsi_cmds.c:280: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ll_read_long': scsi_cmds.c:311: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `get_capacity': scsi_cmds.c:328: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `query': scsi_cmds.c:349: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ReportLUNS': scsi_cmds.c:372: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `ReportOpCodes': scsi_cmds.c:423: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c:423: warning: passing arg 5 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `CheckVolumes': scsi_cmds.c:469: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `CheckPartitions': scsi_cmds.c:494: warning: passing arg 2 of `scsi_command' from incompatible pointer type scsi_cmds.c: In function `UnitReady': scsi_cmds.c:514: warning: passing arg 2 of `scsi_command' from incompatible pointer type gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o pci_util.o pci_util.c gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o block_fill_inbuf.o block_fill_inbuf.c In file included from block_fill_inbuf.c:8: ../include/string.h:9: warning: conflicting types for built-in function `strcpy' gcc -I ../include -I ../include/i386 -O2 -DDEBUG -DZKERNEL_START=0xfff00000 -c -o main.o main.c main.c: In function `main': main.c:41: warning: assignment makes pointer from integer without a cast ld -defsym HEAPSIZE=0x8000 -T elfImage.lds main.o uhci.o usb_scsi_low.o debug.o scsi_cmds.o pci_util.o block_fill_inbuf.o ../lib/baremetal.a -o usbboot.elf uhci.o(.text+0x5e): In function `wait_head': : undefined reference to `udelay' uhci.o(.text+0x70a): In function `port_resume': : undefined reference to `udelay' uhci.o(.text+0x7c2): In function `port_reset': : undefined reference to `udelay' uhci.o(.text+0x819): In function `port_reset_long': : undefined reference to `udelay' uhci.o(.text+0x875): In function `hc_reset': : undefined reference to `udelay' uhci.o(.text+0xcdf): more undefined references to `udelay' follow make: *** [usbboot.elf] Error 1 root@who5:/usr/src/lobos/freebios/util/baremetal/usb# exit Script done on Sat May 8 12:44:16 2004
Gregg C Levine hansolofalcon@worldnet.att.net
"The Force will be with you...Always." Obi-Wan Kenobi "Use the Force, Luke." Obi-Wan Kenobi
-----Original Message----- From: Yinghai Lu [mailto:yhlu@tyan.com] Sent: Saturday, May 08, 2004 12:48 PM To: 'Steven James'; 'Gregg C Levine' Cc: linuxbios@clustermatic.org Subject: re: Is possible Linux on flash memory?
Does it work now?
If it works with raw device, after merge it into filo, it should use file system FAT etc.
Regards
YH
-----邮件原件----- å‘件人: linuxbios-admin@clustermatic.org [mailto:linuxbios- admin@clustermatic.org] 代表 Steven James å‘é€æ—¶é—´: 2004å¹´5月8æ—¥ 5:18 收件人: Gregg C Levine 抄é€: linuxbios@clustermatic.org 主题: RE: Is possible Linux on flash memory?
Greetings,
Yes, a kernel processed with Eric's mkelfImage.
I don't have any filesystem code in the loader, so rather than mounting a filesystem on the USB storage device, you need to partition it and then dd the kernel image to the first partition.
e.g. if your USB device shows up as sdb, dd if=kernel.elf of=/dev/sdb1
G'day, sjames
-------------------------steven james, director of research, linux labs ... ........ ..... .... 230 peachtree st nw ste 2701 the original linux labs atlanta.ga.us 30303 -since 1995 http://www.linuxlabs.com office & fax 866.545.6306
On Sat, 8 May 2004, Gregg C Levine wrote:
Hello from Gregg C Levine It happens I just finished examining the code for the contents of that directory. But I've got just one question pending at the moment, how do you mean, "It will actually load an ELF image written to the raw device.". Explain that line of reasoning. Do you mean a kernel that's been pushed through the creation tool that Eric has created? And "raw device", now I'm lost, how about clarifying your position?
Gregg C Levine hansolofalcon@worldnet.att.net
"The Force will be with you...Always." Obi-Wan Kenobi "Use the Force, Luke." Obi-Wan Kenobi
-----Original Message----- From: linuxbios-admin@clustermatic.org [mailto:linuxbios- admin@clustermatic.org] On Behalf Of Steven James Sent: Friday, May 07, 2004 11:20 PM To: Ken Fuchs Cc: linuxbios@clustermatic.org Subject: Re: Is possible Linux on flash memory?
Greetings,
I've checked in the start of USB booting in util/baremetal/usb. It will actually load an ELF image written to the raw device. I
haven't
been able to find enough time yet to integrate it into FILO, but it
should
probably go there.
G'day, sjames
-------------------------steven james, director of research, linux
labs
... ........ ..... .... 230 peachtree st nw ste
2701
the original linux labs atlanta.ga.us
30303
-since 1995
office & fax
866.545.6306
On Fri, 7 May 2004, Ken Fuchs wrote:
LinuxBIOS doesn't support USB pen drives or USB compact flash. It
does
support ATA (IDE) flash devices.
On a normal (proprietary) BIOS:
Booting from USB is supported on many newer motherboards with a
BIOS
that supports this. I use Flonix to boot from a 64MB USB pen
drive:
The Flonix forums are at:
http://www.flonix.com/support/viewforum.php?f=11
I also tried Puppy Linux (http.goosee.com/puppy/), but the USB bootloader (syslinux 2.08) didn't work for me. Using Knoppix 3.3 2-16-2004, I was able to install it's syslinux 2.04 bootloader:
# syslinux /dev/sda1
To make Flonix bootable, you can also use the above command from the Knoppix live CD.
(The first USB flash is /dev/sda, if there are _no_ SCSI drives. Otherwise, USB flash is the last "SCSI" device, i.e. /dev/sdc with
two
SCSI hard drives with special files /dev/sda and /dev/sdb.)
There are other Linux distributions built to be installed on a USB
pen
drive or flash.
Check out http://www.linux-usb.org/ for general Linux USB
information.
BTW, I sent Flavio a private e-mail to flavio_groups@yahoo.com.br
and it
bounced. So, I'm forced to answer via the LinuxBIOS mailing list. Sorry.
Sincerely,
Ken Fuchs kfuchs@winternet.com