构建Linux驱动开发环境全过程(X210bv3)

来源:互联网 发布:社会融资规模数据特点 编辑:程序博客网 时间:2024/06/07 17:58


1、在虚拟机中安装ubuntu任意版本
2、 ubuntu 配置tftp 服务器
第1 步:安装tftp
安装tftp 所需的软件。首先需要安装tftp-hpa,tftpd-hpa,前者是客户端,后者是服务程序,
在终端下输入sudo apt-get install tftp-hpa tftpd-hpa,安装tftp-hpa 和tftpd-hpa。然
后还需要安装xinetd,在终端下输入sudo apt-get install xinetd,安装好xinetd。
第2 步:配置/etc/xinetd.conf
配置相关服务文件。进入根目录下的etc 文件夹(cd /etc/),首先看目录中有没有一个
xinetd.conf 文件,如果没有则新建一个,有的话查看内容,看是否与下面的一致,若不一致则
修改,内容如下:
# Simple configuration file for xinetd
##
Some defaults, and include /etc/xinetd.d/
defaults
{
# Please note that you need a log_type line to be able to use log_on_success
# and log_on_failure. The default is the following :
# log_type = SYSLOG daemon info
} includedir /
etc/xinetd.d
第3 步:配置/etc/default/tftpd-hpa
配置tftp 服务器
 命令:sudo vim /etc/default/tftpd-hpa
将内容修改成
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/tftpboot"
#这是你tftp 服务器的工作目录,自行修改,注意,在新建工作目录时,最好修改其权限为777,
命令sudo chmod 777 /tftpboot
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="-l -c -s"
第4 步:配置/etc/xinetd.d/tftp
然后进入xinetd.d 文件夹(cd xinetd.d),查看是否有一个tftp 文件,如果没有就新建
一个,如果有的话就查看内容是否与下面的一致,不一致则修改,内容如下:
service tftp
{
socket_type = dgram
wait = yes
disable = no
user = root
protocol = udp
server = /usr/sbin/in.tftpd
server_args = -s /tftpboot
#log_on_success += PID HOST DURATION
#log_on_failure += HOST
per_source = 11
cps =100 2
flags =IPv4
}
其中server_args 一行是配置服务器的文件存放的位置,就是进行tftp 传输的时候,都是从
该文件夹中搜索文件的
第5 步:修改权限
修改所需文件夹的权限。需要修改的文件夹也就是上一步提到的那个服务器文件存放的文
件夹,以我的配置文件为例,创建一个文件夹(sudo mkdir /tftpboot),然后把它可以
设置成访问权限最宽松的(sudo chmod 777 /tftpboot),也可以设置成合适的权限。
第6 步:重启服务
重新启动服务。sudo service tftpd-hpa restart,这也是我经常疏忽的一步,当配置好tftp 的配
置文件后,需要重新启动一下xinetd,在终端中输入sudo /etc/init.d/xinetd reload,重新加载一
下进程,再输入sudo /etc/init.d/xinetd restart,重启服务。记住,每次修改完配置文件后,都需
要重新启动一下服务。
执行次序: sudo service tftpd-hpa restart
sudo /etc/init.d/xinetd reload
sudo /etc/init.d/xinetd restart
总结:
通过以上四步就可以建立好tftp 服务器了,可以在本地先进行一下测试。还是以我的配置
文件为例,首先在/tftpboot 中新建一个文件file,然后在其中随便输入内容;然后进入一个不是
/tftpboot 的目录下(原因是避免混淆,因为在获取文件是,默认是将想要获取的文件存放在当
前目录下的);再在终端中输入sudo tftp localhost,进入tftp 命令符下(可以在其中输入help
查看命令和命令的作用),输入get file,如果没有任何提示,就说明传输成功了,然后输入q
退出tftp 命令符,在当前目录下就可以看到一个file 文件,内容是与开始新建的那个file 的内容
是一致的。同样也可以在tftp 命令符中输入put xx,把xx 文件上传到服务器文件夹中。如果一
切ok,那就么一个可用的tftp 服务器就顺利搭建成功了。
对于上面的测试是针对本地测试的,如果想要对其他电脑或者开发板进行tftp 传输,则在
终端输入sudo tftp xxx(即目标电脑或目标开发板的ip 地址),而且还要关闭ubuntu 自带的防
火墙(书上说的),我是直接把防火墙给卸载了(sudo apt-get remove iptables,或sudo ufw disable
可以关掉防火墙),因为我觉得对于Linux 来说,防火墙可能没什么需要把,至少目前为止我
还没有受到过攻击。。。当然,想要与其他局域网内的电脑或开发板互联进行传输,还要将这
些机器的ip 改到同一个段内。好了,通过以上的步骤,就可以通过tftp 协议,在电脑和开发板
之间进行文件传输了,目前的目的就是下载Linux 内核和文件系统到开发板。如果有朋友发现
了我的不足,都可以给我提出来,我们也可以进行讨论。不过还要强调一点,我的这些配置都
是针对于ubuntu 的,对于其他的系统可能会有所出入的。
3、ubuntu 配置nfs 服务器


第一安装NFS
$ sudo apt-get install nfs-kernel-server
$ sudo apt-get install nfs-common
第二配置/etc/exports
$ sudo vi /etc/exports
文本末添加nfs路径(可随意选择路径)
/root/rootfs *(rw,sync,no_root_squash,no_subtree_check)
然后在终端执行$chmod 777 -R /root/rootfs(将nfs路径权限降到最低)
$ sudo showmount -e 
显示clnt-create : RPC : Program not registered
$ sudo exportfs -r 更新
$ sudo showmount localhost -e
显示
Export list for 192.168.1.116
/root/rootfs *
第三启用
$ sudo /etc/init.d/nfs-kernel-server restart 重启nfs 服务
显示如下
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon [ OK ]
第四挂载测试
$ mount -t nfs -o nolock localhost:/root/rootfs /mnt
执行后,进入/mnt 目录中,如果可以看到/root/rootfs 中的内容,则说明nfs 搭建成功!
之后可以umount /mnt 取消挂载
4、安装交叉编译工具链
步骤1:打开虚拟机,在/usr/local/下创建/usr/local/arm文件夹  
步骤2:先将交叉编译工具链安装包从Windows中弄到linux中去。可以用共享文件夹,也可以用Samba,也可以cuteftp。
步骤3:解压。tar -jxvf arm-2009q3.tar.bz2(由于我使用的是九鼎X210bv3所以厂商提供的交叉编译链安装包是这个)
到此相当于程序已经安装完毕,真正的应用程序安装在/usr/local/arm/arm-2009q3/bin目录下
步骤4:安装后的测试
  到真正的应用程序的安装目录下(也就是/usr/local/arm/arm-2009q3/bin),去执行arm-linux-gcc -v
  执行方法是:./arm-none-linux-gnueabi-gcc -v
  执行后可以得到一长串输出,其中有“gcc version 4.4.1 ”字样,即表示安装成功。
步骤5:如果使用的ubuntu是64位的那么如果安装包软件是32位的会发生错误如下
bash: ./arm-none-linux-gnueabi-gcc: No such file or directory
这是由于32位与64位不兼容的问题,可以通过安装软件来兼容
sudo apt-get install lib32ncurses5
或者sudo apt-get install ia32-libs来解决。
注:linux中的目录管理方法。技术角度来讲,linux中所有目录性质都是一样的,所以技术角度来讲我们把软件安装到哪里都行。但是因为如果胡乱放置,将来程序可能不好找。所以久而久之大家就总结了一个文件放置的一般定义,譬如说/bin目录放置一些系统自带的用户使用的应用程序,/sbin目录下存放的是系统自带的系统管理方面的应用程序。
那我们装软件放在哪里?一般都在/usr目录下。我们安装arm-linux-gcc,就在/usr/local/底下创建一个arm文件夹,然后装到里面。
4、安装窗口菜单库(编译内核的时候需要使用,如果没有安装的话运行make menuconfig会出错)
解决方案:  apt-get install libncurses5-dev 


5.编译内核
第一、选择一种默认配置
make x210ii_qt_defconfig(由于我使用的是x210开发板所以使用这个配置,具体配置厂商会提供)
第二、进入menuconfig进行配置
make menuconfig
第三、配置为nfs启动
1、配置网络部分,主要是使能CONFIG_IP_PNP以在2中能够看到Root file system on NFS选项
Networking support 
Networking options 
TCP/IP networking
IP: kernel level autoconfiguration
[*] IP: DHCP support
[*] IP: BOOTP support

2、配置开启nfs服务
File systems  --->
Network File Systems  --->
<*> NFS client support 
[*] NFS client support for NFS version 3                                  
[*] NFS client support for the NFSv3 ACL protocol extension 
[*] NFS client support for NFS version 4 (EXPERIMENTAL) 
[*] NFS client support for NFSv4.1 (DEVELOPER ONLY) 
[*] Root file system on NFS  
第四、make
注意:如果是在64位的ubuntu环境下会出现错误:Can't use 'defined(@array)' 
 这其实是因为make版本不同造成的语法不兼容的问题。
解决方案:删掉了kernel/timeconst.pl 文件中 373行的
if (!defined(@val)) {
改为if (!@val) {
6、使用busybox创建根目录文件(文件系统),以及制作ext2格式镜像
这部分内容在另一个文章中有详细的描述。(http://blog.csdn.net/wwwchenyc/article/details/70195894)
7、Linux驱动模块的构造运行和装载在另一篇文章中描述()
原创粉丝点击