Presentación
Registrarse
Programa
Desarrollo
Participación
Normas para los autores
Comité de Honor
Comité Organizador
Comité Científico
Comité Técnico
Patrocinadores
Servidores espejo (mirrors)
Noticias
Recortes de prensa,enlaces
|
Charlas 13/12/2000
Log de la conferencia. Se han suprimido las líneas correspondientes
a entradas y salidas de diferentes personas en el canal durante la
conferencia
Philipp Rumpf "Linux on Undocumented Hardware"
[22:17] (fernando> Hello,
[22:17] (fernando> we are very please to have here Philipp Rumpf
[22:18] (fernando> He lives in Erlangen and he is currently studying
mathematics at the
[22:18] (fernando> University of Erlangen-Nurnberg
[22:18] (fernando> He's worked on the Linux Kernel for a while, and he
claims he's played
[22:18] (fernando> with about every subsystem it has
[22:18] (fernando> He is not currently employed by any Linux company.
[22:18] (fernando> volunteers??? :)
[22:18] (prumpf> I'm very pleased to be here :)
[22:18] (fernando> His talk will be about:
[22:18] (fernando> Linux on Undocumented Hardware
[22:18] (fernando> Thank you to our speaker and to all of you for comming
here.
[22:18] (fernando> Philipp....
[22:18] (prumpf> okay
[22:18] (prumpf> let's start by clarifying that title a bit
[22:19] (prumpf> when I say "undocumented hardware", I don't mean ancient
macs, and I don't mean pdp-11s
[22:19] (prumpf> I mean those devices most of us probably have seen a lot this
past year
[22:19] (prumpf> handheld or laptop devices running Windows CE
[22:19] (prumpf> the reason for this is that I think that Windows CE runs on
most of the interesting undocumented hardware nowadays
[22:20] (prumpf> all hardware running Windows CE, as far as I'm aware, has
a MMU, which allows you to run a "real" operating system and get
multitasking, memory protection .. and it makes running standard Linux/Unix
software possible
[22:20] (prumpf> most Windows CE devices have a lot of RAM, at least
compared to calculators and cell phones
[22:20] (prumpf> usually the OS itself is stored on ROM or flash rom
[22:20] (prumpf> of course, it's a natural idea to run Linux on those
[22:20] (prumpf> there's hack value: running Linux on any system that wasn't
originally intended for it sounds tempting to most hackers
[22:21] (prumpf> and trust me, it's actually great when you did it and this
device you have only seen running Windows so far sits there at a bash prompt
:)
[22:21] (prumpf> there are more mature reasons as well
[22:21] (prumpf> for certain applications, Linux simply is the better operating
sysetm
[22:22] (prumpf> Windows CE doesn't have anywhere close to as many
applications as Linux
[22:22] (prumpf> and, of course, Windows CE isn't free. It's not free of
charge, and it's not F
[22:22] (prumpf> and, of course, Windows CE isn't free. It's not free of
charge, and it's not Free in the Free Software sense
[22:23] (prumpf> so that's basically my motivation for porting Linux to
devices currently running Windows CE
[22:23] (prumpf> if you have any questions or comments during the talk, there
is a #qc channel which i'll be trying to monitor
[22:24] (prumpf> of course, some of the Windows CE devices are
documented, and most of the documented devices have Linux ports already
[22:24] (prumpf> the specific device I was porting Linux to is the Compaq
Aero 8000, which is a small laptop running Windows CE or, for a few weeks
now, Linux
[22:25] (prumpf> many people tell me there's still plenty of undocumented
hardware left for YOU to port Linux to, and I hope this talk might help with
that a bit
[22:26] (prumpf> so, how do you go about porting Linux to such a device ?
[22:26] (prumpf> First, you need to run some sort of boot loader or gdb stub
on the device
[22:26] (prumpf> this requires you, obviously, to actually run code on it; this
isn't a problem with most operating systems, which can load binary
executables in mostly standardized formats.
[22:27] (prumpf> such as ELF or COFF, or even PE, which is what Windows
CE uses
[22:27] (prumpf> Some devices don't run a real operating system though (like
cell phones and calculators), and some use a binary format that isn't known,
or not supported by GNU binutils (in particular, Windows CE uses the PE
format, which isn't completely supported by GNU binutils).
[22:28] (prumpf> this means that we don't really want to go to the hassle of
fixing GNU binutils and GCC so we can compile Windows CE applications
with it
[22:28] (prumpf> we want to get rid of Windows CE, not add to it
[22:28] (prumpf> What works well for these devices is taking an existing
executable (or part of the ROM, whatever), finding a (reasonably long) piece
of code that gets run early, and replacing it with your code. This requires
some disassembly, which I'll cover later.
[22:29] (prumpf> of course you can compile your C code with Microsoft's
compiler as well
[22:29] (prumpf> but that requires you to run windows and use non-free tools
[22:30] (prumpf> you can simply take any windows ce binary (preferrably one
without a copyright), and put your assembled code into it, replacing the
windows ce code.
[22:30] (prumpf> so this will have us running any code we want under
Windows CE, or other operating systems
[22:31] (prumpf> but usually user code isn't run with the CPU in privileged
mode, so you'll have to find another way to access privileged resources, such
as IO space and all of your RAM
[22:31] (prumpf> Some versions of Windows CE seem to always run the CPU
in privileged mode, and others provide a SetKMode() syscall which switches
the CPU into privileged mode
[22:31] (prumpf> This has the additional advantage that you can disable
interrupts, which effectively means the original operating system can't get
control of the CPU back from you by servicing interrupts - in other words,
you're free to reuse its memory
[22:32] (prumpf> Doing the equivalent thing for Unix-like operating systems is
a lot harder, since they don't usually allow anyone to put the CPU into
privileged mode
[22:33] (prumpf> instead, you'd have to use /dev/mem and patch the kernel
[22:33] (prumpf> so now we have a piece of code running in privileged mode,
we want to load a kernel image, or a gdb stub
[22:34] (prumpf> Loading a kernel image can be done either using the native
filesystem or directly accessing IO devices;
[22:34] (prumpf> the native filesystem approach requires you to be a lot more
careful about what you do, since any point in the loading process you need to
be able to run part of the native os or other tasks, which won't work if you've
already scribbled over their memory. It also requires you to have your code
do syscalls, which might be very hard or completely impossible when you
don't know the binary format in question.
[22:35] (prumpf> of course this approach is quite elegant, since you don't need
to know about any hardware
[22:35] (prumpf> but since you need to know about the hardware anyway,
since you're going to run Linux on it, I dont 'think that's a good argument
[22:36] (prumpf> The direct IO access approach requires some knowledge
about the hardware you want to access, which means that in the worst case,
you'll have to guess about things while you can execute assembler code only
(since C code requires a relatively large runtime and working compiler
support).
[22:36] (prumpf> I think the direct IO access approach wins, since it
minimizes the amount of code that tries to co-operate with the existing
operating system rather than replace it.
[22:37] (prumpf> htis means your code will be more easily portable to similar
devices
[22:37] (prumpf> Another decision is whether you want to use a gdb stub or a
"real" boot loader; since this doesn't depend on whether the hardware is
undocumented, I won't spend a lot of time on it
[22:38] (prumpf> but when you need to inspect IO registers and memory, a
gdb stub is extremely convenient.
[22:38] (prumpf> so, at this point we have a boot loader, and we've gone
through the boring decisions
[22:39] (prumpf> you will notice that I actually did assume we know a bit
about the hardware here - enough to use one serial port
[22:39] (prumpf> my impression is this is true for most systems, but I will talk
about the case where it isn't some more in the third part of the talk
[22:40] (prumpf> the second part of the talk will cover reverse-engineering,
and making educated guesses about hardware
[22:40] (prumpf> but before I start with that, I think this might be a good point
to ask questions about the talk so far
[22:42] (prumpf> to summarize, I have covered the two basic types of boot
loader, and I hope I've made a point for using a gdb stub rather than a
full-blown boot loader
[22:42] (prumpf> With a gdb stub, or a complete boot loader, we're able to
boot a kernel already
[22:43] (prumpf> this kernel only can support a serial port, but it will already
run and should give us more information about the CPU and the possibility to
access the IO address space and the ROM
[22:43] (prumpf> This is a very important point in the porting process, and
one which you should duly celebrate ;).
[22:44] (prumpf> the next part of this talk will be about hardware rather than
software: it's basically about adding drivers to the very small kernel we're
running now so it will support a real Linux system.
[22:44] (prumpf> Of course you will try to avoid writing those drivers if at all
possible - using someone else's code saves most of the effort on your part, and
many drivers support different chips already, so adding yours might be as
simple as putting two or three #defines in a header file in include/asm.
[22:45] (prumpf> First, let's have a look at how many embedded system (and
quite a few non-embedded systems as well) actually look like IO-wise:
[22:45] (prumpf> usually, we have only two or three chips that are directly
accessible (the CPU, a SuperIO chip which has a variety of functions, and
possibly an LCD controller).
[22:45] (prumpf> It's extremely convenient to have some way to interactively
do I/O accesses, and I'll assume we have one in the rest of this discussion.
Maybe I should point out again that an easy way to do this is running a gdb
stub on the target directly, without an operating system underneath it.
[22:46] (prumpf> When I'm referring to an "I/O dump" lateron, what I mean
is reading every address in a long range and printing the value read - while
this might be destructive to device state and isn't a good idea while the system
is running, it usually doesn't confuse devices so much the system has to be
rebooted to be usable again.
[22:46] (prumpf> so, what you are doing now, in your porting project, is to try
reading different IO addresses
[22:47] (prumpf> and see whether you can find any devices, that is any IO
addresses that read with interesting values rather than all-zeroes/all-noes
[22:48] (prumpf> Most current CPUs have very large address ranges for I/O
accesses, so finding any device at all might require simple scannning code to
avoid having to read thousands of screens of all-zeroes / all-ones IO dumps -
but since there are only a few chips, and usually there is only one IO range
used by each chip, you'll usually only find large blocks of interesting IO
addresses
[22:49] (prumpf> There are two important hings to consider when trying to
find out which I/O ranges actually access interesting devices:
[22:49] (prumpf> first, some address lines might not be decoded
[22:50] (prumpf> so the same register values will repeat over and over again,
and both the size of the repeated region and the number of repetitions will be
a power of two
[22:51] (prumpf> this means there will be regions in our IO dumps that we
don't want to consider, since they're just aliases of a region that already
occured earlier
[22:51] (prumpf> detecting those aliases is very easy when you can write to a
register - if it changes in both regions, they're aliases, otherwise, you're
dealing with two devices that just happen to look similar
[22:52] (prumpf> it is generally a good idea to use the lowest address that will
access a device, rather than any higher alas
[22:52] (prumpf> so, this is relatively easy to deal with.
[22:53] (prumpf> the second important thing is that some devices stop
responding to read accesses when they're suspended for power management
[22:53] (prumpf> those devices need special write sequences to re-enable
them. Those sequences are usually very hard to guess and can't be tested
without potentially corrupting hardware state; on the other hand,
reverse-engineering them from the bootup or driver code might be extremely
easy.
[22:54] (prumpf> if you have a superio chip, it is commonly the case that the
registers that disable certain functions are in one contiguous region
[22:55] (prumpf> so you can be relatively sure you've found all devices when
you manage to find this region and enable all functions in it, then dump the
IO space
[22:55] (prumpf> afterwards you can delete all aliases and end up with a
smaller dump, which you can try associating with devices
[22:56] (prumpf> there are some easily recognizable patterns that occur for
certain devices for which there are widely-accepted standard register layouts
[22:56] (prumpf> the most obvious example are serial ports, which use the
16550 layout
[22:57] (prumpf> Another easily detectable piece of hardware is a
framebuffer -- usually a large bloc of readable and writable memory, with
writes having very visible effects.
[22:58] (prumpf> there are standard register layouts for many other functions,
such as USB and I2C
[22:58] (prumpf> interrupt controllers/multiplexers aren't standardized, but
the most common kind seems to have three registers: one which indicates
which interrupts
[22:59] (prumpf> are pending, one indicating a mask of ignored interrupts, and
the third containing the logic AND of the first two registers - the idea is that
only the third register needs to be read in the interrupt demultiplexing routine.
[23:00] (prumpf> so usually we can determine a lot of the devices we have just
by looking at the IO dump and finding likely candidates, then testing whether
they are really the devices we're looking for by doing write accesses
[23:01] (prumpf> basically, this was the part about making educated guesses
about our hardware, based on the register values we read
[23:01] (prumpf> but usually that isn't enough, and we'll have to look at the
drivers the native OS (i.e. Windows CE, in our example) is using
[23:02] (prumpf> that is, we need to reverse-engineer them
[23:02] (prumpf> WARNING: reverse-engineering is a difficult legal subject,
and laws vary wildly between the EU and the US, with most other countries
being somewhere in between. I can't give legal advise on this. I also want to
make it clear that this information isn't intended to be used for illegal
reverse-engineering. Check your copyright and trade secret laws.
[23:03] (prumpf> It is easy to get a ROM dump once you're running Linux:
since the ROM is usually mapped directly into the CPU's address space,
/dev/mem can be used to read it. If you're lucky, the ROM isn't compressed,
so finding the driver you're looking for might be as easy as searching for
obvious strings in your favourite hex editor - keep in mind Microsoft
operating system commonly use 16-bit Unicode characters for strings.
[23:04] (prumpf> you can also try to find out how the Windows CE ROM
filesystem, or whichever filesystem your OS is using, works, but that seems to
be rather difficult and looking for strings gives satisfactory results
[23:04] (prumpf> Once you have extracted a driver out of the ROM dump, it
is very easy to disassemble it, even when GNU binutils don't support the
object format used:
[23:04] (prumpf> (target>-objdump -D -m(architecture> -bbinary dump.bin
> dump.txt
[23:05] (prumpf> should give you a reasonable result, though you need to
worry about endianness
[23:05] (prumpf> as well.
[23:05] (prumpf> Actually making sense of the disassembler output is harder,
and usually you want to avoid reading and understanding large sections of
code - not only does it take a long time,
[23:05] (prumpf> but it might be creating additional legal problems, especially
when you have to reimplement relatively complex algorithms you've read the
disassembled source for.
[23:06] (prumpf> When all you're looking for is the base address for some
hardware, or some hints that might allow you to find the right register layout
for it, searching the binary for word-sized constants or strings might help you
a lot without too much effort -- and possibly with fewer legal problems than
for a full disassembly.
[23:08] (prumpf> you notice I'm being a bit verbose on "legal problems";
that's because there seems to be an insane number of lawsuits about
reverse-engineering, and you don't want to make yourself a target for thme.
[23:08] (prumpf> Very commonly reading the routines that directly access I/O
space gives you all the information you need to write a working driver for the
device, and it usually doesn't take too long (though finding out which routines
access I/O space isn't entirely simple in the case of remapped I/O ranges).
[23:08] (prumpf> so, again, we can avoid reading the whole driver, or even
large parts of the drive
[23:09] (prumpf> we look for IO addresses, try to find out how they're used
from context, then end up with a number of routines we can simply test the
effects ofM
[23:10] (prumpf> a full disassembly almost certainly takes more time than
you're willing to spend on one device, and you don't get anything for most of
the time you spend on it, either
[23:10] (prumpf> Error message strings are the closest you have to comments
in disassembled code, so reading them carefully and matching them up with
code can help a lot.
[23:10] (prumpf> when you have the choice between reading English text and
reading disasembled source, English wins
[23:11] (prumpf> If you indeed decide to do a more complete disassembly,
you will find that you're trying to match up virtual addresses used in the
disassembled source with the addresses objdump used for the disassembled
source - by default, it starts at address 0. The --adjust-vma option might
work for this, or you might have to split up the binary dump at page
boundaries.
[23:11] (prumpf> this, again, is something only to do when you find out you
need it
[23:13] (prumpf> the less time you spend looking at disassembled source, and
the sooner you make sure you've deleted all copies of the rom, the less legal
problems you might have to deal with
[23:13] (prumpf> So much for disassembling once you have a rom dump and a
running linux system or a gdb stub.
[23:14] (prumpf> This is a lucky situation: you already know about one serial
port at least
[23:14] (prumpf> but sometimes you aren't ugly, and you can't even get a gdb
stub running without additional information.
[23:14] (prumpf> This means that the only device you could find is the
framebuffer, or not even that.
[23:15] (prumpf> Since the framebuffer isn't a very good output device
(unless you _like_ to write down 16 MB of hex numbers), this means all you
have is an indication your program is running at all, and maybe some debug
information.
[23:15] (prumpf> but it's not enough to disassemble code, because you have to
copy it down from the display byte-for-byte
[23:16] (prumpf> obviously, this is a very bad situation, and for a long time I
didn't think I could find a solution
[23:16] (prumpf> but there is one
[23:16] (prumpf> on operating systems that keep their read-writable
filesystem in RAM (Windows CE does this on most devices), and on
operating systems that cache file data in RAM, you can still get a copy of the
ROM, even without knowing about the serial port
[23:17] (prumpf> the idea is that we can overwrite a file's data in physical
RAM, without the native OS knowing we did so
[23:18] (prumpf> if we create a file containing magic numbers, we can search
for these magic numbers in our Windows CE program and replace them with
parts of the ROM data
[23:18] (prumpf> then we can copy the file back to a linux box and
disassemble it like we would a rom dump created from within Linux
[23:19] (prumpf> the important point here is we don't know anything about
the serial port, framebuffer, or keyboard/touch screen
[23:20] (prumpf> you still have to make sure the file you want to modify
doesn't contain any data that compresses well, since Windows CE, and other
operating systems, transparently compress data when possible
[23:22] (prumpf> I got the impression that many people are stuck in a position
where this hack would help them
[23:24] (prumpf> at the end of this talk, I'd like to mention some projects that
I think would help Linux port to more Windows CE devices, but which I
won't be able to work on anytime soon
[23:24] (prumpf> 1. Support for Windows CE's ROM filesystem in Linux,
either as a kernel space filesystem or as a set of userspace utilities
[23:25] (prumpf> 2. Better support for the PE format in GNU binutils
[23:26] (prumpf> 3. A smarter disassembler than objdump, which still works
for a wide range of architectures and keeps up-to-date with GNU binutils
changes
[23:26] (prumpf> 4. The ability to run Windows CE binaries in Linux
[23:28] (prumpf> I think it's obvious 4) requires 1) and partially 2), but we
should try to nullify all arguments against running Linux on Windows CE
hardware.
[23:28] (prumpf> are there any questions ?
[23:28] (MJesus> clap clap clap clap clap clap clap clap clap clap
[23:28] (MJesus> clap clap clap clap clap clap clap clap clap clap
[23:28] (MJesus> clap clap clap clap clap clap clap clap clap clap
[23:29] (MJesus> clap clap clap clap clap clap clap clap clap clap
[23:29] (MJesus> clap clap clap clap clap clap clap clap clap clap
[23:29] (fernando> plas plas plas plas plas plas plas plas plas plas plas plas
[23:29] (fernando> plas plas plas plas plas plas plas plas plas plas plas plas
[23:29] (fernando> plas plas plas plas plas plas plas plas plas plas plas plas
[23:29] (mje> clap clap clap clap clap clap clap clap clap clap
[23:29] (mje> clap clap clap clap clap clap clap clap clap clap
[23:29] (mje> clap clap clap clap clap clap clap clap clap clap
[23:29] (mje> clap clap clap clap clap clap clap clap clap clap
[23:29] (mje> clap clap clap clap clap clap clap clap clap clap
[23:30] (fernando> well, let's start with questions ....
[23:30] (Kerberos> plas plas plas plas plas plas plas
[23:30] (Kerberos> plas plas plas plas plas plas plas
[23:31] (prumpf> there was one question that was asked very early during the
talk, which was how this applies to systems that don't run Windows CE
[23:32] (fernando> yes
[23:32] (fernando> do you have experiences with other OS's ?
[23:32] (prumpf> I think most of it can be applied perfectly well, but there are
important differences between Windows CE and other operating systems
[23:33] (prumpf> some operating systems make it even easier to read system
files and access privileged resources
[23:34] (prumpf> DOS would be a typical example :)
[23:34] (prumpf> (but Amigas and Acorns ran operating systems which
preserved these attributes as well)
[23:35] (prumpf> some other operating systems make it very very hard to
access the hardware from userspace or to modify the kernel; those are
mostly Unix variants
[23:37] (trusmis> do you think that a person that hardly has read some kernel
codes but has a not-bad hardware knowledge is able to do something
interesting ?
[23:38] (prumpf> which means that they use a real boot loader anyway, so you
don't need to do any of the hacks required to load one OS from anotehr
[23:38] (prumpf> so, to summarize, I don't think there are many operating
systems out there which make porting harder than Windows CE
[23:38] (prumpf> even game consoles usually allow you to access the
hardware directly and sometimes document their hardware
[23:38] (prumpf> does that answer the question ?
[23:38] (prumpf> yes, definitely.
[23:39] (trusmis> i don't catch very well that part of the magic numbers and
replacing for rom -code
[23:40] (trusmis> it really work?
[23:42] (prumpf> the question was i don't catch very well that part
of the magic numbers and replacing for rom -code it really work?
[23:43] (prumpf> it works, since Windows CE doesn't checksum its file data
[23:43] (trusmis> ohh , then not wrong .exe ......
[23:43] (prumpf> the blocks of the file are scattered all over the device's
physical memory
[23:44] (prumpf> we find them and overwrite their contents, but we do this, of
course, out of order
[23:46] (MJesus> what would be the main difference between running
Windows CE binaries in Linux and running Windows XXX binaries in linux ?
[23:48] (MJesus> lagggggggg!!
[23:51] (prumpf> I have to admit I wasn't entirely serious when I asked for
Windows CE binary support in Linux
[23:52] (prumpf> but I am completely serious when I ask for Windows CE
_source_ support for Linux
[23:52] (prumpf> running programs written for Windows CE is the easiest
way to ensure Linux on those devices will become at least as useful as
Windows CE.
[23:53] (prumpf> does that answer that question ?
[23:53] (MJesus> ja!! thanks !
[23:55] (prumpf> any other questions ? the ones so far were extremely
interesting
[23:55] (MJesus> yes!
[23:56] (CtrInt> may I break my hardware doing nasty things on porting?
[23:56] (prumpf> very good question.
[23:56] (CtrInt> as i done with some pc devices.. :-P
[23:56] (prumpf> I've been worried about that myself
[23:57] (prumpf> so far I know about two things that might make your
hardware unusable:
[23:57] (prumpf> 1. writing to a flash rom too often, or writing bad data to it
so it won't boot anymore.
[23:57] (prumpf> 2. disabling/enabling an lcd display very often and without
the proper power-off/power-on sequences
[23:59] (prumpf> I suspect some low-end devices have a battery charging unit
that's controllde by software and can break the battery, but I haven't heard
confirmation for that.
[23:59] (prumpf> so I'd say that there is a risk but it is very low.
[0:00] (CtrInt> I understand breaking the boot on flash by bad code on it but...
can be broken by writing frecuencly to it?
[0:01] (prumpf> flash rom only supports a limited number of write/erase
cycles, typically 100,000 to 1,000,000
[0:03] (fernando> so...
[0:03] (fernando> more questions?
[0:03] (prumpf> (or comments, of course)
[0:04] (^J0eL_R^> cuando comienzan las conferencias?
[0:04] (trusmis> prumpf: do you think linux will beat CE in short term¿?
[0:04] (trusmis> i have seen lots of windows ce nowadays :(
[0:05] (prumpf> trusmis: I think both Linux and Windows CE will become,
absolutely, more popular in the short term for small-scale pc-like devices
[0:07] (fernando> I think is time to thank to our speaker and to all of you for
comming here
[0:07] (fernando> feel free to continue discussing about the topic
[0:07] (prumpf> trusmis: so the important thing is that we can make those
devices run Linux well and usefully, and then hardware manufacturers will
start using Linux more frequently, and then it's up to the market to decide
[0:07] (prumpf> fernando: thanks for making this possible for me
[0:07] (fernando> the recording of this talk will be on the web as soon as
possible (typically in 8-9 hours, when our webmaster will wake up)
[0:08] (trusmis> the weell if linux work -> people use -> manufactures
realizes -> linux work
[0:09] (fernando> joel today it is finishing
[0:09] (fernando> next talk will be tomorrow
[0:10] (MJesus> clap clap clap clap clap clap clap clap clap clap
[0:10] (MJesus> clap clap clap clap clap clap clap clap clap clap
[0:10] (MJesus> clap clap clap clap clap clap clap clap clap clap
[0:10] (MJesus> clap clap clap clap clap clap clap clap clap clap
[0:12] (prumpf> trusmis: there's a very important first step to do here, which
is to make Linux work on as wide a rage of hardware as possible
[0:12] * trusmis agrees
[0:13] (trusmis> to make linux work _well_
[0:15] (fernando> see you tomorrow
[0:15] (trusmis> do you think in the future most drivers will be Gpl?
[0:16] (trusmis> i'm thinking in nvidia and others that seems to not free them
[0:16] (prumpf> there are high-end devices, and I'm not sure how much
co-operation to expect from those manufacturers
[0:17] (prumpf> for mid-range devices, not supporting linux would mean
losing a significant part of the market share, and soon nvidia will realize that
[0:17] (prumpf> for low-end / embedded devices, cost is of paramount
importance
[0:18] (prumpf> those hardware manufacturers have little to lose by giving out
their driver source code, and some (like Epson) have been doing that.
[0:20] (Ricardo> They win much more than lose
[0:21] (trusmis> what will be the first steps to get info if for example i have a
sound card and no doc about it ? and even no windows driver, any way to
achieve information?
[0:21] * trusmis wasn't here all the talk , sorry if you say it before
[0:25] (prumpf> trusmis: of course there's the chance that the hardware is
sound blaster compatible
[0:25] (trusmis> if not
[0:25] (trusmis> ?
[0:26] (prumpf> trusmis: but there is no real standard for sound cards, so you
might need to disassemble the driver or look for other ways to find things out
[0:26] (prumpf> of course, the _first_ step is to ask for documentation
[0:27] (Ricardo> prumpf: who knows? They sometimes even give you the doc
X)
[0:27] (prumpf> ricardo: indeed.
[0:27] (trusmis> prumpf: they use to give you something?
[0:27] (prumpf> trusmis: some vendors give out documentation to linux
developers, yes.
[0:28] (trusmis> prumpf: interesting, .....
[0:32] (trusmis> prumpf: what do you recommend a beginner can begin with?
[0:32] (trusmis> prumpf: something easy ... that make you learn...
[0:33] (Ricardo> Uh
[0:33] (Ricardo> He told 'easy'
[0:33] (Ricardo> :D
[0:36] (prumpf> trusmis: for doing what ?
[0:37] (trusmis> a driver
[0:37] (calc> write a usb driver for the 3com usb camera :)
[0:37] (trusmis> i think all net card drivers are almost the same
[0:38] (trusmis> somethink like that, you can take a look at the already made
code what make it easier
[0:39] (prumpf> sound drivers are interesting and easy, but you might not be
able to use what you learn.
[0:39] (makross> byes, and thx :))
[0:47] * prumpf leaves
[0:47] (prumpf> thanks everyone
[0:47] (trusmis> thank you
[1:02] *** prumpf has quit IRC (Leaving)
Y seguimos un buen rato más charlando...
Contact:
|