ubuntu 下的开发

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

.ubuntuminicom 的使用

1.sudo aptget install minicom

2.sudo minicom -s

a. 串口COM1 对应ttyS0, COM2 对应ttyS1usb 转串口对应ttyUSB0

插上usbserials 设备后,在/dev 下应该会有设备文件ttyUSB0

b. 其他设置参考网上.

此时,minicom 可以用来显示信息了

3.sudo aptget install lrzsz

此时,可以用来传输文件了: 例如 load flash kernel x


. 编译工具安装

1. 编译bootloader2.95.3 版本. 下载,安装在某一目录,( 设置环境变量)

2. 编译26 以上内核用3.4.1 版本. 下载,安装在某一目录,( 设置环境变量)


.tftp 服务安装与配置

1.sudo aptget install tftp // 客户端

sudo aptget install tftpd // 服务器端

sudo aptget install openbsd-inetd // 守护进程,用来监听客户端请求

2.gedit /etc/inetd.conf
tftp dgram udp wait nobody /usr/sbin/tcpd /usr/sbin/in.tftpd /tftpboot # /tftpboot
tftp 主目录

3.service openbsd-inetd restart

4. 在跟目录新建tftpboot 文件夹, 并设置可读写权限, 至此tftp 服务配置完成

5. 测试手段查阅网络

 

.NFS 服务配置

1.sudo apt-get install portmap nfs-common nfs-kernel-server

2. 修改/etc/exports 文件, 新增: nfsboot * (rw,sync,no_root_squash)

3. sudo service portmap restart

sudo service nfscomnom restart

sudo service nfs-kernel-server restart

4. 在客户端可以mount /nfsboot 文件夹了.

测试手段查阅网络: 例如:mount -t nfs 10.96.15.168:/nfsboot /mnt

 

<!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

. 内核中的 Kconfig Makefile

1.arch/arm/configs/smdk2410_defconfig 是官方配好的针对S3C2410 的配置文件

2.Kconfig 组织成编译内核时的菜单( 选项) ,配置好内核后在内核主目录下产生.config 文件,Makefile 根据.config 文件编译内核

关于Kconfig:

如果是arm 的话,根据arm 文件夹内的Kconfig 从上到下依次包括别个文件夹内的Kconfig 对应的组成配置内核菜单( 菜单和选项) ,最终还会根据默认的配置文件来决定显示输出某些菜单和选项,类似于Makefile

menu 关键字产生 菜单 ,并非选项.

config symbol 关键字根据symbol 是否定义决定在对应菜单下产生选项

bool“xxx” 形变量只有“编译”和“移除”两种

tristate “xxx” 形变量为3 态,包括“模块”

depends on 指此菜单的出现是否依赖于另一个定义。

如果此 XXX 变量在配置内核时被选中或模块形式,对应的 symbol .config 文件中就会成 y 或者 M.

同文件夹的 Makefile 中的 obj-$(config_symbol) += abc.o 会根据 symbol 来决定是否编译 abc.o, abc.o 则有 Makefile 同文件夹中的 abc.c 而来

 

.VIVI 编译

1. 在网上下 VIVI 纯净版,解压到 /usr/local/arm, 生成 vivi 文件夹

2. 修改-》 LINUX_INCLUDE_DIR =/usr/local/arm/linux-2.6.14.1/include

CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-

ARM_GCC_LIBS = /usr/local/arm/2.95.3/lib/gcc-lib/arm-linux/2.95.3

3. vivi/arch/s3c2410 里修改 smdk.c 中的 NANDFLASH 分区信息,如下:

mtd_partition_t default_mtd_partitions[] = {

{

name: "vivi",

offset: 0,

size: 0x00020000,

flag: 0

}, {

name: "param",

offset: 0x00020000,

size: 0x00010000,

flag: 0

}, {

name: "kernel",

offset: 0x00030000,

size: 0x001d0000,

flag: 0

}, {

name: "root",

offset: 0x00200000,

size: 0x00200000,

flag: 4

},{

name: "program",

offset: 0x00400000,

size: 0x03a00000,

flag: 0

}

};

char linux_cmd[] = "noinitrd root=/dev/mtdblock/3 init=/linuxrc console=ttySAC0";

4.shell 里输入: sudo make vivi 编译后会在 vivi 根目录下声称 vivi 的二进制文件 .

 

. 内核( 2.6.14 版本)编译

1. 下载内核源码。

2. 过程不叙述,见《 linux 移植》,但 MTD 的分区应和 VIVI 分区保持一致,否则系统将无法从 MTD 分区里找到系统或根文件。

    #make menuconfig

   #make dep //检查依赖关系

   #make clean //清理以前编译出来的一些文件

   #make bImage

   #make modules

   #make modules_install  //生成在/lib/modules/xxx,一些模块,该文件夹可以直接复制到开发板中,或编译进文件系统


  如果是本机内核编译,则继续进行下面操作

   #/sbin/depmod -a //创建模块链接

   #make install     //

  #mkinitramfs -o /boot/initrd-2.6.xx 2.6.xx

  #update-initramfs -c -k 2.6.xx //把l/lib/modules/xxx下一些启动会用到的模块加载到initramfs

 

. 根文件制作

由于开发板自带根文件系统是 busybox0.6 版本,不支持 insmod, 因此自己重新制作了根文件系统 .

交叉编译器: arm-linux-gcc-3.3.2.tar.bz2

根文件系统: busybox-1.1.3

1.mkdir /usr/local/arm/rootfs

2.mkdir bin dev etc home lib mnt proc sbin sys tmp var usr

3. 再建立 etc 下的 init.d 文件夹。

4. 准备启动所需的文件: linuxrc rcS inittab fstab 四个文件;

linuxrc 文件:

#!/bin/sh

echo "mount /etc as ramfs"

/bin/mount -f -t cramfs -o remount,ro /dev/bon/2 /

/bin/mount -t ramfs ramfs /var

/bin/mkdir -p /var/tmp

/bin/mkdir -p /var/run

/bin/mkdir -p /var/log

/bin/mkdir -p /var/lock

/bin/mkdir -p /var/empty

#/bin/mount -t usbdevfs none /proc/bus/usb

exec /sbin/init

rcS 文件:

#!/bin/sh

/bin/mount -a

这两个文件生成后,应该使其具有执行的权限,可使用 chmod 775 linuxrc rcS 来修改, linuxrc 应该放在 rootfs 根目录, rcS 应该放在 rootfs/etc/init.d/ 目录。

inittab 文件:

# This is run first except when booting

::sysinit:/etc/init.d/rcS

# Start an "askfirst" shell on the console

#::askfirst:-/bin/bash

::askfirst:-/bin/sh

# Stuff to do when restarting the init process

::restart:/sbin/init

# Stuff to do before rebooting

::ctrlaltdel:/sbin/reboot

::shutdown:/bin/umount -a -r

fstab 文件:

none /proc proc defaults 0 0

none /dev/pts devpts mode=0622 0 0

tmpfs /dev/shm tmpfs defaults 0 0

这两个文件应该放在 rootfs/etc/ 目录,应该注意其权限问题。

如果使用 linux 2.6.xx 内核,应该实现创建节点 console null 。转到 rootfs/dev/ 目录来创建:

sudo mknod console c 5 1

sudo mknod null c 1 3

否则就会提示“ Warning: unable to open an initial console.

Kernel panic - not syncing: Attempted to kill init!” 的类似错误。

5. busybox-1.1.3 文件夹:

1.make menuconfig // 注意需要够选的选项,可查网上

2.make TARGET_ARCH=arm

3.make PREFIX=/usr/local/arm/rootfs all install

会在 /usr/local/arm/rootfs 生成 bin sbin usr linuxrc 文件。

注:网上说要用自己的 linuxrc 代替 busybox 生成的 linuxrc ,但启动时系统无法找到 linuxrc. 这里直接采用 busybox 自己生成的 linuxrc

  1.  
    1. cd /usr/local/arm/

    2. 使用 mkcramfs 工具: mkcramfs rootfs rootfs.cramfs

 

.CS8900a 网卡驱动

1. 拷贝文件 cs8900.c cs8900.h linux2.6.14.1/drivers/net/arm

2. 修改 drivers/net/arm/Kconfig

加入以下内容:

config CS8900
tristate "CS8900 support"
depends on NET_ETHERNET && ARM && ARCH_SMDK2410
help

3. 修改 drivers/net/arm/Makefile, 加入以下内容 obj-$(CONFIG_CS8900) += cs8900.o

4. include/asm-arm/mach-s3c2410 中创建 regs-cs8900.h , 内容如下

#ifndef _INCLUDE_REGS_CS8900_H

#define _INCLUDE_REGS_CS8900_H

include <linux/config.h>

#define Psmdk2410_eth_io 0x19000000

#define vSMDK2410_ETH_IO 0xE00 00000

#define SMDK2410_ETH_IRQ IRQ_EINT9

#endif // _INCLUDE_REGS_CS8900_H

: 如果是其他开发板 , 这些参数未必相同 .

5. arch/arm/mach-s3c2410/mach-smdk2410.c 中加入头文件:

include <asm/arch/regs-cs8900.h>

并加入地址转换信息 , 找到 smdk2410_iodesc[] 结构数组 , 加入:

{vSMDK2410_ETH_IO, 0x19000000, SZ_1M, MT_DEVICE},

>>>>>>>>>>> 至此编译并烧录内核,发现找不到网卡

6. cs8900.c 中加入语句:

#define CONFIG_ARCH_SMDK2410 1

#ifdef CONFIG_ARCH_SMDK2410

#include <asm-arm/arch-s3c2410/regs-cs8900.h>

#endif

>>>>>>>>>> 至此编译并烧录内核 , 启动信息中能找到网卡 , 但是 eth0: incorrect signature 错误

7. cs8900.c 中加入语句:

#include <asm-arm/arch-s3c2410/regs-mem.h> // 定义下面 2 个寄存器

找到 cs8900_probe 函数中的 mem_set ,在下面加入:

__raw_writel(0x2211d110,S3C2410_BWSCON);

__raw_writel(0x1f7c,S3C2410_BANKCON3);

>>>>>>>> 至此编译并烧录内核 , 网卡正常启动 , 设置 IP 可以 ping 通主机 .


. 开发板 NFS

重新编译内核 ,, 选中如下配置

File systems

Network File Systems --->

[*] NFS file system support
[*]Provide NFSv3 client support
[*] Provide client support for the NFSv3 ACL protocol extension
[*]Provide NFSv4 client support (EXPERIMENTAL)
[*]Allow direct I/O on NFS files (EXPERIMENTAL)
[ ] NFS server support
[*] Root file system on NFS

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值