[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Adding armel to dpkg and setting build cpu?



Martin Guy a écrit :
> Hi
>    I'm doing the Debian arm eabi port wiki.debian.org/ArmEabiPort
> <http://wiki.debian.org/ArmEabiPort>, which is still for ARM processors
> but with a new incompatible ABI.
>    I have got to the point where I need to modify dpkg and apt to add
> the new arch and would appreciate some guidance as to the best way to do
> this.
> 
> My two questions are basically how/where I should implement the new arch
> name, and how I set the cpu version for which packages will be compiled.
> 
> A few terms:
> - the new Debian architecture it has been "decided" will be called
> "armel", which seems awkward because "armeb" is already coded into many
> packages and means big-endian old-ABI... but I suppose it may all work
> out all right in the end.
> - the minimum CPU for which we can currently compile for ARM EABI is
> armv4t (armv4 may be in the pipeline).
> - the 4-part GNU/Autoconf configuration string for this arch is
> arm*-*-linux-gnueabi, which is ok. OS variants have been coded that way
> before: -gnulibc and -gnuuclibc spring to mind.
> 
>    Anyway, Nokia have already implemented something close in structure
> to Debian ARM EABI in their "mistral" distribution of "maemo" and they
> call their packages *_armel.deb. However, instead of adding armel to
> /usr/share/dpkg/archtable, they have hard-coded tests for "armel" and
> "-gnueabi" into the apt and dpkg scripts, which seems to work but
> doesn't seem right. There's a quick summary of what they've done to dpkg
> here: http://cluster.aleph1.co.uk/~martin/packages/dpkg.txt
> <http://cluster.aleph1.co.uk/%7Emartin/packages/dpkg.txt>
> 
>   In regular Debian etch I can see in /usr/share/dpkg/archtable
> 
> # <ignore>                      <Debian name>
> i486-linux-gnu                  i386
> ia64-linux-gnu                  ia64
> alpha-linux-gnu                 alpha
> arm-linux-gnu                   arm
> 
> so I would have guessed that
> arm-linux-gnueabi               armel
> would be the one here (I gather the first column is obsolete these days)
> while in /usr/share/dpkg/cputable we have
> 
> # Column 1 is the Debian name for the CPU, used to form the architecture
> # name.
> # Column 2 is the GNU name for the CPU, used to output build and host
> # targets in \xe2\x80\x98dpkg-architecture\xe2\x80\x99.
> # Column 3 is an extended regular expression used to match against the
> # CPU part of the output of the GNU config.guess script.
> #
> # <Debian name> <GNU name>      < config.guess regex>
> i386            i486            (i[3456]86|pentium)
> ia64            ia64            ia64
> alpha           alpha           alpha.*
> amd64           x86_64          x86_64
> armeb           armeb           arm.*b
> arm             arm             arm.*
> 
> so I guess
> armel           armv4t          ?????
> 
> Is this used to match on config.guess output and derive the debian arch?
> If so we're stuck, cos on current arm etch on an armv4t we get
> armv4l-unknown-linux-gnu while current armel systems give
> armv6l-unknown-linux-gnu or armv5tejl-unknown-linux-gnu
> 
> Again, in the apt sources there is buildlib/archtable with
> i.86    i386
> pentium i386
> ...
> arm.*b  armeb
> arm.*   arm
> 
> I'm probably getting confused here between debian arch names and gnu cpu
> names. Frinstance, armeb is recognised as a GNU cpu name, but armel isn't.
> 
> Finally there is /usr/share/dpkg/ostable with
> # Column 1 is the Debian name for the system, used to form the
> # architecture name.
> # Column 2 is the GNU name for the system, used to output build and host
> # targets in \xe2\x80\x98dpkg-architecture\xe2\x80\x99.
> # Column 3 is an extended regular expression used to match against the
> # system part of the output of the GNU config.guess script.
> #
> # <Debian name> <GNU name>      < config.guess regex>
> linux           linux-gnu       linux[^-]*(-gnu.*)?
> darwin          darwin          darwin[^-]*
> freebsd         freebsd         freebsd[^-]*
> 
> which Nokia have modified to:
> gnueabi-linux   linux-gnueabi   linux[^-]*-gnueabi
> gnu-linux       linux-gnu       linux[^-]*(-gnu)?
> none-darwin     darwin          darwin[^-]*
> none-freebsd    freebsd         freebsd[^-]*
> 
> which is fair enough, since gnueabi is the OS variant, the same as
> gnulibc1, gnuuclibc and so on, though dpkg-unstable has not gone this way.
> 
> I mean, I can just make patches to apply their modifications, full of
> "case armel" and "if arm-linux-gnueabi" clauses, but there may be a
> better way.
> I notice that this seems to be the first time that a Debian architecture
> name has been "chosen" that is not a valid first part of a GNU
> configuration string. Is that why it has to be done with case statements
> and ifs?
> -----------------
> 
> That's one. The other one is more of a debian newbie question: where do
> I set the minimum cpu that packages are compiled for? This must already
> happen for debian i386 arch to compile for i486 cpu on pentium-4 boxes,
> and on current arm architecture to compile for armv3 on armv5t boxes.
>   What about sourec packages that do not use "configure" but just
> blindly compile with the system gcc? On x86 this is ok because the
> default cpu is i386, but on GCC-4.1 the default ARM cpu is armv5t. Do I
> need to configure the debian gcc to set the default CPU to our minimum too?
> 
> Lastly, what are armv4l and armv4b, as opposed to ARM instruction sets
> armv4, armv4t or cpu versions arm920t, xscale...
> 

If I am right, l means little endian, b big endian, and t means that the
thumb (= 16-bit) instructions are supported. For arm920t, it is an armv5
processor with thumb support, available as an hard IP.


-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32@debian.org         | aurelien@aurel32.net
   `-    people.debian.org/~aurel32 | www.aurel32.net



Reply to: