微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 超经典!工程师嵌入式Linux自学笔记及体会

超经典!工程师嵌入式Linux自学笔记及体会

时间:09-24 来源:电子发烧友网论坛 点击:

盘启动一台假象的只有一个串口,键盘输入,显示输出的x86 架构的 linux 系统,执行的特定应用就是运行 minicom,通过串口拨号。需要软件: minicom-xx.src.tar.gz 和 syslinux-xx.tar.gz,xx 代表版本号,开始之前,在主目录建立一个目录,来释放这两个软件包:

  cd

  mkdir -p project/minilinux

  cd project/minilinux

  tar zxvf minicom-xx.src.tar.gz

  tar zxvf syslinux-xx.tar.gz

  1、裁减 linux 内核(需要系统安装内核文件包)

  配置内核的时候,我们需要选择这些:摸块编入内核,386 处理器、物理内存 off、支持 ELF、标准 PC 软盘、支持 RAM 盘(4096)、支持 initial RAM disk(initrd)、虚你终端、虚拟终端控制台、标准串口、ext2 文件系统、控制台驱动,VGA text console、DOS FAT、MSDOS 文件系统,其他的都可以不要,这样内核编出来较小。

  步骤:

  cd /usr/src/linux

  make mrproper

  make xconfig

  make dep && make bzImage

  得到 /usr/src/linux/arch/i386/boot/目录的内核文件 bzIamge。

  2、编译一个静态的 minicom ,把它作为将来的 linuxrc

  cd minicom-xx/src

  vi Makefile

  修改下面这行

  minicom: $(minicom_OBJECTS) $(minicom_DEPENDENCIES)

  rm -f minicom 下面的行加上 -static,连接为静态程序

  (LINK) -static $(minicom_LDFLAGS) $(minicom_OBJECTS) $(minicom_LDADD) $(LIBS)

  vi minicom.c

  找到 if (real_uid==0 && dosetup==0 ) 删除这个判断条件语句,主要是用于权限判断的,因为这个嵌入应用不关注权限问题,否则会出错。

  make

  得到可执行程序,用 ldd 检查一下是不是静态程序。

  3、准备 initrd 压缩文件 image.gz

  dd if=/dev/zero of=image bs=1k count=4096

  losetup /dev/loop0 image

  mke2fs -m 0 /dev/loop0

  mounmt -t ext2 /dev/loop0 /mnt/

  mkdir -p /mnt/dev

  mkdir -p /mnt/usr/share/terminfo/l/

  cd /dev

  cp -a consle null tty tty0 zero mem /mnt/dev

  cp -P /usr/share/terminfo/l/linux /mnt/usr/share/terminfo/l/linux

  cp ~/project/minilinux/mincom/src/minicom /mnt/linuxrc

  umount /mnt

  losetup -d /dev/loop0

  sync

  gzip -9 image
  4、制作软盘引导,并拷贝文件 bzimage image.gz 到软盘

  A.使用 grub

  fdformat /dev/fd0

  mke2fs /dev/fd0

  mount /mnt/fd0 /mnt/floppy

  mkdir -p /mnt/floppy/boot/grub

  cp /boot/grub/stage1 /boot/grub/stage2 /mnt/floppy/boot/grub

  执行 grub,在软盘上创建引导

  grub > root (fd0)

  grub > setup (fd0)

  grub > quit

  cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy

  cp ~/porject/minilinux/image.gz /mnt/floppy

  编辑 /mnt/floppy/boot/grub/grub.conf

  default =0

  timeout-=10

  title minilinux

  root (fd0)

  kernel /bzImage

  initrd /image.gz

  卸下软盘

  umount /mnt/floppy

  B. 使用 syslinux

  fdformat /dev/fd0

  mkfs.msdos /dev/fd0

  mount -t msdos /dev/fd0 /mnt/floppy

  cp /usr/src/linux/arch/i386/boot/bzImge /mnt/floppy

  cp ~/porject/minilinux/image.gz /mnt/floppy

  cp syslinux-xx/ldlinxu.sys /mnt/floppy

  cat > /mnt/floppy/syslinux.cfg

  LABEL linux

  KERNEL bzimage

  APPEND initrd=image.gz

  umont /mnt/floppy

  syslinux-xx/syslinux /dev/fd0

  sync

  5、用软盘启动计算机,如果幸运,minicom 的运行画面出现在屏幕上。

  到此,我们的单应用嵌入式 linux 做好了,但它还很简陋,没有什么实际用途,但通过这个实验,可以了解嵌入式系统的大致结构和开发过程。在进行实际的嵌入式开发时,通常要在 PC 机上借助嵌入式 linux 开发工具包,如:uclinux,bluecat 等,对相应的硬件平台(目标机)进行软件编写编译,调试成功后,将内核及应用程序写入到目标机的存储器中,从而完成整个应用。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top