一安装交叉编译器arm-linux-gcc-4.3.2.tar.bz2
1先查看交叉编译器arm-linux-gcc -v
不同的编译器编译不同的内核
2查看环境变量echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/work/tools/gcc-3.4.5-glibc-2.3.6/bin
3安装交叉编译器arm-linux-gcc-4.3.2.tar.bz2
步骤:先把安装包arm-linux-gcc-4.3.2.tar.bz2 放到/work/tools/
cd /work/tools/
sudo tar xjf arm-linux-gcc-4.3.2.tar.bz2 -C /(-C指的路径)
sudo vi /etc/environment //编辑环境变量文件,加入编译器的bin目录路径 /usr/local/arm/4.3.2/bin
进入Vi编辑器,按i进入插入模式,添加 /usr/local/arm/4.3.2/bin(把原来最后的安装编译器的路径去掉), 按wq退出
source /etc/environment //使文件生效
echo $PATH //查看此时环境变量的显示(如下图就正确)
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin
安装完成可以的写一个代码进行编译看是否成功
二移植linux-3.4.2的内核
把下载的内核linux-3.4.2压缩包放到的/work/system
tar xjf linux-3.4.2.tar.bz2
cd /work/system/linux-3.4.2
修改顶层的Makefile
ARCH ?= arm
CROSS_COMPILE ?= arm-linux-
make s3c2410_defconfig//进行编译生成.config (不用修改机器ID)
make uImage
把生成的ulmage 下载到开发板上
解决内核烧到开发板上出现效验失败问题 Verifying Checksum … Bad Data CRC问题
原因:烧进开发板的内核(2.3M)大于内核分区(2M),部分代码丢失,校验失败(像id和其他的基本都不用改,可能韦东山老师已经改过)
方法是进行分区减少代码量
cd /work/system/linux-3.4.2
make menuconfig //对内核进行裁剪
System Type->
SAMSUNG S3C24XX SoCs Support->
[ ] SAMSUNG S3C2410
[ ] SAMSUNG S3C2412
[ ] SAMSUNG S3C2416/S3C2450
[ ] SAMSUNG S3 C2442
[ ] SAMSUNG S3C2443
[ ] Simtec Electronics ANUBIS
[ ] Avantech AT2440EVB development board
[ ] NexVision NEXCODER 2440 Light Board
[ ] Simtec IM2440D20 (OSIRIS) module
[ ] HP iPAQ rx3715
File systems --->
< > Second extended fs support
< > Ext3 journalling file system support
CD-ROM/DVD Filesystems --->
< > ISO 9660 CDROM file system support
DOS/FAT/NT Filesystems --->
< > MSDOS fs support
< > VFAT (Windows-95) fs support
[*] Miscellaneous filesystems --->
< > Compressed ROM file system support (cramfs)
[ ] Include support for ZLIB compressed file systems
< > ROM file system support
Device Drivers --->
SCSI device support --->
< > SCSI device support
Input device support --->
[ ] Provide legacy /dev/psaux device
[ ] Mice --->
[ ] Keyboards --->
[ ] Joysticks/Gamepads --->
[*] Touchscreens --->
<*> Samsung S3C2410/generic touchscreen input driver
< > USB Touchscreen Driver
<*> Sound card support --->
<*> Advanced Linux Sound Architecture --->
[ ] USB sound devices --->
Multifunction device drivers --->
< > Support for Silicon Motion SM501
< > Support for NXP PCF50633
[*] USB support --->
[ ] USB device filesystem (DEPRECATED)
[ ] The shared table of common (or usual) storage devices
< > USB Serial Converter support --->
make uImage //ulmage1.9M
内核出现乱码
我的乱码是的|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||类似这样的
解决内核乱码方法 (记的打补丁)
1 先把ulmage下载到开发板上
2 进入uboot菜单界面,使用命令q进入设置区
3 set bootargs console=ttySAC0,115200 root=/dev/nfs
4 save进行保存
5 boot进行启动
构建根文件系统,只有匹配相应的文件系统才能运行
移植Busybox-1.7.0
cd /work/system
tar -xjf busybox-1.7.0.tar.bz2
解压后,cd busybox-1.7.0 进入busybox-1.7.0目录
在顶层Makefile中 修改 CROSS_COMPILE ?= arm-linux-
make menuconfig 进行编译
在Library Tuning(库调整)子菜单中设置按tab键补齐,如下图:
取消静态连接,如下图:
选择tar命令:
选择insmod/rmod/lsmod命令,支持2.6.x内核:
支持mdev(并支持medv.conf和热拔插),选择mount/umount命令(并支持NFS文件系统)
选择ifconfig命令
make //编译busybox可执行文件
会出现错误
cd /usr/local/arm/4.3.2/.../arm-none-linux-gnueabi/libc/usr/include/linux
sudo sudo netfilter.h
添加的 #include <netinet/in.h>
就可以成功编译Busybox1.7.0
cd /work/nfs_root
mkdir fs_mini_mdev_new
make CONFIG_PREFIX= /work/nfs_root/fs_mini_mdev_new install //安装到指定目录下
安装的 glibc库
cd /work/system/busybox1.7.0
echo $PATH //查看一下环境变量
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/arm/4.3.2/bin
cd /usr/local/arm/4.3.2
find -name lib//查看库看到如下这两个库是需要复制的
./arm-none-linux-gnueabi/libc/armv4t/lib
./arm-none-linux-gnueabi/libc/armv4t/usr/lib
cd /work/nfs_root/ fs_mini_mdev_new
mkdir lib//在 /work/nfs_root/ fs_mini_mdev_new下创建目录lib
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib //进入此目录
cp *.so* /work/nfs_root/ fs_mini_mdev_new/lib -d //复制lib目录下的*.so*到 /work/nfs_root/ fs_mini_mdev_new/lib目录下
cd /work/nfs_root/ fs_mini_mdev_new
mkdir -p usr/lib //同时创建dev和lib两个目录
cd /usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/usr/lib //进入此目录
cp *.so* /work/nfs_root/ fs_mini_mdev_new/usr/lib -d //进行复制
cd /work/nfs_root
cp fs_mini_mdev/etc fs_mini_mdev_new -rf //减少过程的配置在复制文件的基础上进行删除和增减修改
cd /work/nfs_root/ fs_mini_mdev_new
sudo vi /etc/init.d
修改s3c2410_serial10::askfirst:-/bin/sh为console::askfirst:-/bin/sh //对应从内核传入的参数
cd /work/nfs_root/ fs_mini_mdev_new
mdkir dev //创建设备目录、
cd dev
sudo mknod –m 660 console c 5 1 //创建console字符设备,设置权限用户和组都能读写
sudo mknod –m 660 null c 1 3 //创建null 字符设备, 设置权限用户和组都能读写
cd /work/nfs_root/ fs_mini_mdev_new 返回到fs_mini_mdev_new
mkdir proc mnt tmp sys root //创建其他目录
cd /work/nfs_root //准备开始制作的文件系统
mkfs.jffs2 -n -s 2048 -e 128KiB -d fs_mini_mdev_new -o fs_mini_mdev_new.jffs2
把它下载到开发板上出现此情况
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004. 编译busybox 和 kernel 的工具链的体系结构不一样
文件的解决办法是:使内核具有的相同的EABI
cd /work/system/linux-3.4.2
make menucofig
make uImage
然后下载开发板上
然后进入uboot的菜单中
使用命令q进入设置参数中
nand erase.part rootfs
set bootargs console=ttySAC0,115200 root=/dev/mtdblock3 rootfstype=jffs2
就ok了