需要的所有文件 --------------------- 链接: https://pan.baidu.com/s/1hMTAppeF_DdCsnVEEJEDPw 密码: vel1
首先要在开发板上搭建一个Linux系统,需要完成以下几个步骤
1.BootLoader-----打补丁、编译 u-boot---执行以下步骤----最终目的:启动内核
$ tar xjf u-boot-1.1.6.tar.bz2 //解压 u-boot-1.1.6.tar.bz2 压缩包
$ cd u-boot-1.1.6 //进入 u-boot-1.1.6 目录
$ patch -p1 < ../u-boot-1.1.6_jz2440.patch //对 u-boot-1.1.6 打 patch 补丁
$ make 100ask24x0_config //配置
$ make //编译 u-boot.bin
-
然后将文件通过oflash将最终生成的u-boot.bin下载到开发板的NORFLASH(具体步骤参考ttps://blog.csdn.net/m0_37844072/article/details/113729680的第二点)。然后在开发板上插入USB线,然后掉电重启开发板,在串口看到打印信息代表U-boot烧录成功。。。
-
u-boot从Flash读出内核放到SDRAM,然后即可启动内核。。(所以u-boot需要包含实现的功能:读写Flash,初始化SDRAM(初始化时钟,初始化串口),启动内核。。)
-
但是编译报错:解决Ubuntu 64bit下使用交叉编译链提示error while loading shared libraries: libz.so.1
然后百度了一下:解决办法如下.... sudo apt-get install lib32z1 lib32z1-dev
2.打补丁、编译内核---为了启动根文件上的应用程序
$ tar xjf linux-2.6.22.6.tar.bz2 //解压 linux-2.6.22.6.tar.bz2
- 修改Linux-2.6.22.6的交叉编译工具链---(安装交叉编译工具链可看第三项为安装教程注意:PATH为PATH=/home/zion/linux/gcc_jz2440/arm-linux-gcc-3.4.5-glibc-2.3.6/bin:$PATH)---然后根据自己的交叉编译工具链的位置做如下修改。。。并且ARCH改为arm
- 修改内核文件的Makefile
$ cd linux-2.6.22.6 //进入 linux-2.6.22.6 目录
$ patch -p1 < linux-2.6.22.6_jz2440.patch //将linux-2.6.22.6_jz2440.patch拷贝到linux-2.6.22.6目录下,,给 linux-2.6.22.6 打 patch 补丁
$ cp config_ok .config //拷贝开发板配置文件
$ make uImage //编译内核生成 uImage 镜像
- Linux3.4.2编译 问题语句:Install ncurses(ncurses-devel) and try again。
打开一个终端输入下面这条语句按回车进行安装即可。
apt-get install libncurses5-dev
-
Linux3.4.2编译 问题语句:Can't use 'defined(@array)' (Maybe you should just omit the defined()?)at kernel/timeconst.pl line 287.
解决方法:今天编译内核遇到的问题,根据error出错目录,找到timeconst.pl文件,进入找到defined(@array)这句,根据括号内提示,忽略defined,将:
if (!defined(@val)) {
改为:
if (!(@val)) {
-
Linux3.4.2编译 问题语句:mkimage command not found – U-Boot images will not be built
解决办法:sudo apt-get update sudo apt-get install u-boot-tools
- 编译成功后,在内核 arch/arm/boot 目录即生成 uImage。。
-
此时需要连接开发板上的USB口到电脑上,然后重启板子可在串口上看到打印的信息,按下空格,根据提示选择K,下载Linux Kernel Image文件。。
-
然后通过dnw下载生成好的uImage到开发板 。。下载成功即代表把Linux内核加载到开发板上了。。。。。
3.Busybox制作部分根文件系统
1.解压并进入busybox-1.7.0文件夹
2.在/busybox-1.7.0目录下make menuconfig
报错:Makefile:405: *** mixed implicit and normal rules: deprecated syntax
Makefile:1242: *** mixed implicit and normal rules: deprecated syntax
make: *** No rule to make target 'menuconfig'. Stop.
解决:由于make的版本过高,需要修改Makefile,如下操作。。。
1在makefile中将405行代码
config %config: scripts_basic outputmakefile FORCE
改为
%config: scripts_basic outputmakefile FORCE
2在makefile中将1242行代码
/ %/: prepare scripts FORCE
改为
%/: prepare scripts FORCE
2.在Makefile配置交叉编译工具链:如下图所示
3.安装到busybox文件下
4.将根文件系统制作成yaffs2映像文件
zion@lbw:~/gcc_jz2440/busybox-1.7.0/first_file_systeam$ mkdir dev
zion@lbw:~/gcc_jz2440/busybox-1.7.0/first_file_systeam$ cd dev/
zion@lbw:~/gcc_jz2440/busybox-1.7.0/first_file_systeam/dev$ sudo mknod console c 5 1
zion@lbw:~/gcc_jz2440/busybox-1.7.0/first_file_systeam/dev$ sudo mknod null c 1 3
zion@lbw:~/gcc_jz2440/busybox-1.7.0/first_file_systeam/dev$ ls -l
total 0
crw-r--r-- 1 root root 5, 1 Feb 24 21:10 console
crw-r--r-- 1 root root 1, 3 Feb 24 21:11 null
- 拷贝交叉编译工具链的lib文件夹下的.so文件到busybox的文件系统的lib目录下
zion@lbw:~/gcc_jz2440$ cd arm-linux-gcc-3.4.5-glibc-2.3.6/arm-linux/lib
zion@lbw:~/gcc_jz2440/arm-linux-gcc-3.4.5-glibc-2.3.6/arm-linux/lib$ cp *.so* ~/gcc_jz2440/busybox-1.7.0/first_file_systeam/lib -d
- 将根文件系统制作成yaffs2映像
zion@lbw:~/gcc_jz2440/Download/JZ2440V3/systems/Development_util_ok$ cd yaffs2/utils/
zion@lbw:~/gcc_jz2440/Download/JZ2440V3/systems/Development_util_ok/yaffs2/utils$ make
zion@lbw:~/gcc_jz2440/Download/JZ2440V3/systems/Development_util_ok/yaffs2/utils$ sudo cp mkyaffs2image /usr/local/bin/
zion@lbw:~/gcc_jz2440/Download/JZ2440V3/systems/Development_util_ok/yaffs2/utils$ sudo chmod +X /usr/local/bin/mkyaffs2image
zion@lbw:~/gcc_jz2440/busybox-1.7.0$ mkyaffs2image first_file_systeam first_file_systeam.yaffs2 //在first_file_systeam文件下生成first_file_systeam.yaffs2文件
- 烧录文件系统
至此,我们可在开发板上输入命令。。。。 u-boot + linux内核 +根文件系统 至此在开发板上搭建完成。。。