Thank you Maksym. You, your post, and that link are awesome. I was eventually able to get that to work, below are the problems I had. This did work, however, this kernel it builds doesn’t include ALSA audio support, so I was not able to use ALSA, which was a requirement for me. I attempted to compile the ALSA driver natively but couldn’t get it to work. Any ideas on how I could get ALSA added to this kernel?? For now I’m going to try the OpenEmbedded route again. Here are the problems I ran into in the how-to:
The command 'cross make -j16 uImage modules
’ seemed to work but actually didn’t create an image. I re-ran the command it was complaining about 2 missing commands: lzma and makeimage. In Ubuntu 11.10 I installed them with apt-get install lzma and apt-get install u-boot-tools.
The command 'sudo_cross make -j16 modules_install
’ complained about not being able to find the command arm-angstrom-linux-gnueabi-gcc, even though the cross compiler directory was in my path. Not sure why it couldn’t find it, but I created the link /usr/bin/arm-angstrom-linux-gnueabi-gcc which pointed to the cross-comipler gcc to fix: ‘ln -s ~/cross-compiler-directory/arm-angstrom-linux-gnueabi-gcc /usr/bin/arm-angstrom-linux-gnueabi-gcc’
I didn’t want to do a network boot, so I zipped the contents of rootfs to an archive, and extracted that archive to an SD card, (see below on how I made a 2 partion card) (you don’t have to tar, I did it to have a backup of the root file system): sudo tar -zcvf archive.tar.gz rootfs && sudo tar -zxvf archive.tar.gz /media/rootfs/ --strip=1
I wanted to boot from the mini-SD card instead of a network boot, so I used the following for uEnv.txt instead of what he had posted (some of these parameters may not be correct, not sure about dvimode, omapfb.vram, vram, optargs, but this worked for me):
dvimode=“hd720 omapfb.vram=0:8M,1:4M,2:4M”
vram=16M
optargs=“consoleblank=0”
console=ttyO2,115200n8
mpurate=800
mmcroot=/dev/mmcblk0p2 rw
nfsargs=setenv bootargs console=${console} mpurate=${mpurate}
After booting the newly built kernel, you will have to get the necessary packages to compile natively.
opkg update && opkg install gcc binutils make pkgconfig automake autoconf libc6-dev cpp gcc-symlinks
ln -s /usr/bin/arm-angstrom-linux-gnueabi-objdump /usr/bin/objdump
ln -s /usr/bin/arm-angstrom-linux-gnueabi-ld /usr/bin/ld
cd /usr/src/linux
make modules_prepare
Compile your kernel module, there are several examples online, and insmod it. Voila.
I think it’s crazy for someone to put this much time into this when it’s already been done a thousand times. Following is a link to my root file system, boot files, and an example kernel driver in the home directory of the file system. Username and password is root and password. Also included is a script to create a 2 partition SD card. The script creates a FAT32 and an ext3 partition. Put the boot files in the FAT32 partition titled boot. Extract the root file system to the partition titled rootfs, using tar as described above. NOTE: The make 2 partition card script creates a 1GB Linux partition, I expanded this partition to the remaining space on my card using gParted in Ubuntu 11.10, the Linux root file system is about 1.2GB.
http://dl.dropbox.com/u/91277089/angstrom_2.6.38_kernel_compile.zip
Following is the script I used to make an SD card with 2 partitions. The Linux partition it creates is less than 1GB, I used gParted in Ubuntu 11.10 to resize/expand the Linux partition. The scripts expects one parameter to passed to it, and that parameter is the name of the SD card under the /dev directory. Be careful not to pass your hard drive device name into the script.
#!/bin/sh
mk2PartSDCard.sh v0.1
Licensed under terms of GPLv2
DRIVE=$1
dd if=/dev/zero of=$DRIVE bs=1024 count=1024
SIZE=fdisk -l $DRIVE | grep Disk | awk '{print $5}'
echo DISK SIZE - $SIZE bytes
CYLINDERS=echo $SIZE/255/63/512 | bc
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
,9,0x0C,*
10,114,
EOF
mkfs.vfat -F 32 -n “boot” ${DRIVE}1
umount ${DRIVE}1
mkfs.ext3 -L “rootfs” ${DRIVE}