1.whereis 文件名
特点:快速,但是是模糊查找
例如:
whereis php #会把php,php.ini,php.*所在的目录都找出来.
2.find / -name 文件名
特点:准确,但速度慢,消耗资源大
例如:
如果想找到php.ini的准确位置,需要用
#find / -name php.ini
3.locate 文件名
最快,最好的方法.
注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了.
1.whereis 文件名
特点:快速,但是是模糊查找
例如:
whereis php #会把php,php.ini,php.*所在的目录都找出来.
2.find / -name 文件名
特点:准确,但速度慢,消耗资源大
例如:
如果想找到php.ini的准确位置,需要用
#find / -name php.ini
3.locate 文件名
最快,最好的方法.
注意:第一次使用该命令,可能需要更新数据库,按照提示的命令执行一下就好了.
Unescaped left brace in regex is illegal here in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /home/recologypower/f1c200s/C200S_Linux_V0.1/out/sunivw1p1/linux/common/buildroot/host/usr/bin/automake line 4113.
autoreconf: /home/recologypower/f1c200s/C200S_Linux_V0.1/out/sunivw1p1/linux/common/buildroot/host/usr/bin/automake failed with exit status: 255
staging_dir/host/bin/automake的4113行报错
因为新版的perl不在支持左大括号的使用,
进入这个文件删掉大括号,问题解决。
sudo apt-get update
sudo apt-get install -y curl openssh-server ca-certificates
sudo apt-get install -y postfix
使用左右键和回车键选择确定、取消,弹出列表选项的时候,选择 Internet Site
curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null
由于国外的下载速度过慢,所以配置清华大学镜像的路径。
根据你的版本,选择对于的内容写入/etc/apt/sources.list.d/gitlab-ce.list
,详见Gitlab Community Edition 镜像使用帮助
deb https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/ubuntu xenial main
sudo apt-get update
sudo apt-get install gitlab-ce
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
http://电脑的IP地址
第一次进入,需要输入管理员账号的密码,以方便后期的管理。
输入好之后,就可以以管理员进行登录,账号是root,密码就是你刚才输入的密码。
至此,gitlab已安装成功,之后的使用方式,和github没有太大差异,就不进行介绍了。
编辑gitlab.rb
sudo gedit /etc/gitlab/gitlab.rb
将如下数据进行更改
external_url 'http://gitlab.example.com'
比如说更改为
external_url 'http://192.168.39.100:7800'
其中,192.168.39.100是安装了gitlab的这台电脑的IP,端口只要不冲突就行
更改之后,需要执行如下代码
sudo gitlab-ctl reconfigure
最后,在浏览器中访问gitlab,发现已修改成功,需要使用192.168.39.100:7800
来访问
停止
sudo gitlab-ctl stop
开启
sudo gitlab-ctl start
确认配置(修改配置后,必须执行)
sudo gitlab-ctl reconfigure
卸载gitlab
执行如下四步:
sudo gitlab-ctl uninstall
sudo dpkg -r gitlab-ce
sudo rpm -e gitlab-ce
reboot(重启)
详见 https://blog.csdn.net/samxx8/article/details/72329002
/var/opt/gitlab/git-data/repositories
(https://docs.gitlab.com/ce/administration/repository_storage_paths.html
)
参照 https://blog.csdn.net/qq_36467463/article/details/78283874
https://blog.csdn.net/hust_cxl/article/details/77332451
https://www.cnblogs.com/m2ez/p/7063606.html
https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/
spi-flash系统生成需要进行四部曲: “uboot” 、 “dtb” 、“kernel” 和 “rootfs” 。以16M flash举例, 介绍 spi flash 的适配过程。 分区表如下:
分区序号 | 分区大小 | 分区作用 | 地址空间及分区名 |
mtd0 | 1MB (0x100000) | spl+uboot | 0x0000000-0x0100000 : “uboot” |
mtd1 | 64KB (0x10000) | dtb文件 | 0x0100000-0x0110000 : “dtb” |
mtd2 | 4MB (0x400000) | linux内核 | 0x0110000-0x0510000 : “kernel” |
mtd3 | 剩余 (0xAF0000) | 根文件系统 | 0x0510000-0x1000000 : “rootfs” |
# 此处为获取7.2.1版本,您可获取其他版本或者通过链接直接下载
wget http://releases.linaro.org/components/toolchain/binaries/7.2-2017.11/arm-linux-gnueabi/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
tar -vxJf gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi.tar.xz
sudo cp -r ./gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi /opt/
sudo vim /etc/bash.bashrc
# 在文件末尾 添加以下内容
PATH="$PATH:/opt/gcc-linaro-7.2.1-2017.11-x86_64_arm-linux-gnueabi/bin"
# 添加完毕
# 使路径生效
source /etc/bash.bashrc
此时可用 arm-linux-gnueabi-gcc -v
进行测试;若普通用户状态下没有成功,通过 sudo su
切换到root用户再尝试;
1、从GitHub下载uboot源码
sudo apt-get install git git clone https://github.com/Lichee-Pi/u-boot.git cd u-boot # 查看分支 git branch -a # 切换到 Nano 分支 git checkout nano-v2018.01
2、uboot源码结构
.
├── api //封装一些平台无关的操作,如字符串打印,显示,网络,内存
├── arch //以平台架构区分
│ ├──arm
│ │ └──cpu
│ │ │ └──arm926ejs
│ │ │ │ └──sunxi //cpu相关的一些操作,如定时器读取
│ │ │ │ │ └──u-boot-spl.lds //spl的放置方法
│ │ └──dts
│ │ │ └──suniv-f1c100s-licheepi-nano.dts // f1c100s芯片的一些配置
│ │ │ └──suniv-f1c100s-licheepi-nano.dtb
│ │ │ └──suniv-f1c100s.dtsi
│ │ │ └──suniv.dtsi
│ │ └──lib //一些库文件
│ │ └──mach-sunxi
│ │ │ └──board.c //board_init_f
│ │ │ └──dram_sun4i.c //ddr的操作,复位,时钟,延时,odt,etc.
│ │ │ └──dram_helpers.c //ddr的设置及读写测试
├── board
│ ├──sunxi
│ │ └──board.c //sunxi_board_init 入口
│ │ └──dram_suniv.c //DRAM的一些默认参数
├── cmd //Uboot命令行的一些命令
├── common //含spl
├── configs //menuconfig里的默认配置,比如各类驱动适配
│ ├── licheepi_nano_defconfig
│ ├── licheepi_nano_spiflash_defconfig
├── disk //硬盘分区的驱动
├── doc
├── drivers //外设驱动
├── dts
├── examples
├── fs //多种文件系统
├── include
│ ├──configs
│ │ └──sunxi_common.h //预配置的参数,如串口号等
│ │ └──suniv.h
├── lib //加密压缩等算法
├── net //nfs,tftp等网络协议
├── post
├── scripts
3、uboot配置
# 此处告知make采用arm-linux-gnueabi下的所有交叉编译工具,目标架构为Arm,设定各项默认配置为 nano 的spiflash支持版
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- licheepi_nano_spiflash_defconfig
# 若不带spi-flash的板子,请换成 licheepi_nano_defconfig
修改文件uboot源码目录下 进入 ./include/configs/suniv.h
#define CONFIG_BOOTCOMMAND "sf probe 0:50000000; " \
"sf read 0x80C00000 0x100000 0x4000; " \
"sf read 0x80008000 0x110000 0x400000; " \
"bootz 0x80008000 - 0x80C00000"
# 进行可视化配置
make ARCH=arm menuconfig
#取消勾选 [ ] Enable a default value for bootcmd
#勾选 [*] Enable boot arguments;
#在下方一项中填入 bootargs 参数:
console=ttyS0,115200 panic=5 rootwait root=/dev/mtdblock3 rw rootfstype=jffs2
#(root=/dev/mtdblock3 指的是mtd设备第三分区,分区指定在dts中声明)
4、添加LCD支持
ARM architecture ‣ Enable graphical uboot console on HDMI, LCD or VGA 为 Y
#接着配置同级的 LCD panel timing details 为:
#分辨率800*480
x:800,y:480,depth:18,pclk_khz:33000,le:87,ri:40,up:31,lo:13,hs:1,vs:1,sync:3,vmode:0
#分辨率480*272
x:480,y:272,depth:18,pclk_khz:10000,le:42,ri:8,up:11,lo:4,hs:1,vs:1,sync:3,vmode:0
并将 LCD panel backlight pwm pin 设为:PE6 (管脚参照原理图)
5、uboot编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4
编译完成后,可一看到目录下多了一堆以u-boot带头的文件,我们只需取 u-boot-sunxi-with-spl.bin 即可。
1、从GitHub下载Linux源码
#下载代码
git clone --depth=1 -b f1c100s-480272lcd-test https://github.com/Icenowy/linux.git
下载配置文件:
下载 .config 文件,放入源码主目录进行替换 (若下载时文件名有变,请重命名回 .config );
2、DTS修改
修改内核源码目录下的 ./arch/arm/boot/dts/suniv-f1c100s-licheepi-nano.dts
&spi0 {
pinctrl-names = "default";
pinctrl-0 = <&spi0_pins_a>;
status = "okay";
spi-max-frequency = <50000000>;
flash: w25q128@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "winbond,w25q128", "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <50000000>;
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;
partition@0 {
label = "u-boot";
reg = <0x000000 0x100000>;
read-only;
};
partition@100000 {
label = "dtb";
reg = <0x100000 0x10000>;
read-only;
};
partition@110000 {
label = "kernel";
reg = <0x110000 0x400000>;
read-only;
};
partition@510000 {
label = "rootfs";
reg = <0x510000 0xAF0000>;
};
};
};
};
此处在dts中为mtd设备预先划分好了分区内容,内核将会自动解析 。
3、内核配置修改
#打开可视化配置窗口
make ARCH=arm menuconfig
勾选 File systems ‣ Miscellaneous filesystems ‣ Journalling Flash File System v2 (JFFS2) support 。
勾选 Device Drivers -> Memory Technology Device (MTD) support ,及下面子项:
勾选 Device Drivers -> SPI support ,及下面子项:
Allwinner A31 SPI Controller (勾选)
Allwinner A10 SoCs SPI controller (不勾选)
修改源码下的 ./drivers/mtd/ spi-nor/ spi-nor.c
修改对应spi-flash;如 w25q128 :
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, SECT_4K) },
// 修改为 (不使用sector,使用块擦除):
{ "w25q128", INFO(0xef4018, 0, 64 * 1024, 256, 0) },
4、内核编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 #请自行修改编译线程数
生成的 zImage 在 arch ‣ arm ‣ boot 目录下
编译工具链为 arm-linux-gnueabi,工具链的安装请参考 uboot 编译部分 。
进入Linux目录,执行如下代码:
设备树在源码的 linux ‣ arch ‣ arm ‣ boot ‣ dts ‣ suniv-f1c100s-licheepi-nano.dts;
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- dtbs -j4
生成的 dtb文件 在 dts同级目录下 。
1、下载依赖包
apt-get install linux-headers-$(uname -r)
2、buildroot下载配置
wget https://buildroot.org/downloads/buildroot-2017.08.tar.gz
tar xvf buildroot-2017.08.tar.gz
cd buildroot-2017.08/
make menuconfig
Target options --->
Target Architecture Variant (arm926t) ---> // arm926ejs架构
[ ] Enable VFP extension support // Nano 没有 VFP单元,勾选会导致某些应用无法运行
Target ABI (EABI) --->
Floating point strategy (Soft float) ---> // 软浮点
System configuration --->
(Lichee Pi) System hostname // hostname
(licheepi) Root password // 默认账户为root 密码为licheepi
[*] remount root filesystem read-write during boot // 启动时重新挂在文件系统使其可读写
3、编译
若编译时,buildroot下载软件包速度太慢,请下载 dl.zip ,将其中的软件包解压至 buildroot ‣ dl 下;
#编译命令:
make
编译完成的镜像包,是在 buildroot-2017.08 ‣ output ‣images ‣ rootfs.tar 中找到 。
脚本下载:
把.txt改成.sh。
linux下的变量可分成两种:Shell变量和环境变量。
Shell变量,又称本地变量,包括私有变量以及用户变量,不同类的shell有不同的私有变量,bash,ksh,csh等,每种shell的私有变量都不一样
环境变量,又称用户变量,与shell无关
常规定义变量的方法:变量名=变量值
注意:
1.变量名和=号之间不能有空格,否则shell会把变量名当成命令
2.变量名称一般使用大写字母
env命令:显示当前用户的环境变量
set命令:不加参数,显示当前shell的所有本地设置的Shell变量,否则设置shell变量
unset命令:unset为shell内建指令,删除变量或函数。
exprot命令:显示(设置)当前导出成用户变量的shell变量(注意:export为bash或类bash私有的命令)
echo $变量名:查看变量值(其中,$变量:引用变量的意思)
[laiyu@localhost ~]$ env
HOSTNAME=localhost.localdomain
SHELL=/bin/bash
TERM=xterm
HISTSIZE=1000
USER=laiyu
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;…
MAIL=/var/spool/mail/laiyu
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/laiyu/bin
PWD=/home/laiyu
LANG=en_US.UTF-8
…
HOME=/home/laiyu
LOGNAME=laiyu
…
_=/bin/env
[root@localhost ~]# set | more
BASH=/bin/bash
…
BASH_CMDS=()
…
[laiyu@localhost ~]$ export TEST=test #增加一个环境变量TEST
[laiyu@localhost ~]$ env | grep TEST #查看增加的变量
TEST=test
[laiyu@localhost ~]$ unset $TEST #删除环境变量TEST(这里TEST前有无美元符都一样)
[laiyu@localhost ~]$ env | grep TEST #输出为空
注意:unset只能删除非只读变量
[root@localhost ~]# echo $HOME
/root
列出所有的Shell赋予程序的环境变量
[root@localhost ~]# export -p #等同export
…
declare -x HOME=”/root”
declare -x HOSTNAME=”localhost.localdomain”
declare -x LANG=”en_US.UTF-8″
declare -x LESSOPEN=”|/usr/bin/lesspipe.sh %s”
declare -x LOGNAME=”root”
declare -x PATH=”/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/bin/:/usr/local/tsung/bin”
…
把shell变量导出为用户变量
[root@localhost ~]# SHOUKE=ishouke #定义shell变量
[root@localhost ~]# echo $SHOUKE
ishouke
#查看当前用户的用户变量是否存在SHOUKE变量,结果是不存在
[root@localhost ~]# env | grep SHOUKE
#查看当前shell的本地变量是否存在SHOUKE变量,结果是不存在
[root@localhost ~]# set | grep SHOUKE
SHOUKE=ishouke
#查看Shell赋予程序的环境变量中是否存在SHOUKE变量,结果不存在
[root@localhost ~]# export | grep SHOUKE
#导出shell变量为用户变量
[root@localhost ~]# export SHOUKE
[root@localhost ~]# env | grep SHOUKE
SHOUKE=ishouke
[root@localhost ~]#
————————————–
也可以如下方式使用export
[root@localhost ~]# export SHOUKE=ishouke
[root@localhost ~]# env | grep SHOUKE
SHOUKE=ishouke
[root@localhost ~]#
注意:以上的设置仅在当前打开的shell窗口或或其子shell窗口中起作用,临时的,关闭当前shell窗口或重启机器,则刚才的设置失效,,或打开一个新窗口,设置在新窗口中不起作用。
d 是 Linux/UNIX 下的一个非常有用的命令,作用是用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。
名称: dd
使用权限: 所有使用者dd 这个指令在 manual 里的定义是 convert and copy a file
使用方式:
dd [option]
如果你想要在线看 manual, 可以试试:
dd –help
或是
info dd
如果你想要看看这个版本如何:
dd –version
输入或输出
dd if=[STDIN] of=[STDOUT]
强迫输入或输出的Size为多少Bytes
bs: dd -ibs=[BYTE] -obs=[SIZE]
强迫一次只做多少个 Bytes
cbs=BYTES
跳过一段以后才输出
seek=BLOCKS
跳过一段以后才输入
skip=BLOCKS
例1:要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令:
$ dd if =/dev/fd0 of = /tmp/tmpfile
拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:
$ dd if = /tmp/tmpfile of =/dev/fd0
软盘拷贝完成后,应该将临时文件删除:
$ rm /tmp/tmpfile
例2:把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。
(注意:软盘中的内容会被完全覆盖掉)
$ dd if = net.i of = /dev/fd0 bs = 16384
例3:将文件sfile拷贝到文件 dfile中。
$ dd if=sfile of=dfile
例4:创建一个100M的空文件
dd if=/dev/zero of=hello.txt bs=100M count=1
$ dd if=/dev/zero of=./test.txt bs=1k count=1
$ ls -l
total 4
-rw-r–r– 1 oracle dba 1024 Jul 15 16:56 test.txt
eg:
$ find / -name access_log 2>/dev/null
创建特定大小文件最简单的方法是使用 dd 命令。
dd if=“inputFileName” of=”outFileName” bs=”块大小” count=“块个数”
块大小可以使用各种计量单位
字节(1B) – c 字(2B) – w
块(512B) – b 千字节(1024B) – k
兆字节(1024K) – M 吉字节(1024M) – G
例:
dd if=/dev/zero of=test.file bs=1M count=10
在当前文件夹下创建一个大小为10M的文件test.file 内容全为0
/dev/zero 是一个字符设备,它会不断返回0值字节(/0).
如果不指定输入参数(if),默认情况会从stdin读取输入。如果不指定输出参数(of),默认情况会将stdout作为输出。
也可用 dd 命令来传输大量数据来测试内存的操作速度。
$ dd if=/dev/zero of=./testmm.file bs=10M count=10 记录了10+0 的读入 记录了10+0 的写出 104857600字节(105 MB)已复制,0.577581 秒,182 MB/秒 $ ll -h |grep ‘testmm.file’ -rw-rw-r–. 1 itudu itudu 100M 7月 16 18:14 testmm.file
文件类型:
一般文件: –
目录文件: d
字符设备: c
块设备: b
链接文件: l
套接字文件: s
管道文件: p
目录的读、写、执行权限意义:
读权限:允许读取目录中文件和子目录的列表
写权限:允许在目录中新建和删除文件或子目录
执行权限:可以访问目录中的文件和子目录
如果在uboot中实现了LCD等显示设备的驱动,uboot在启动的时候会在屏幕的左上角显示一个logo,如下图:
这个logo默认情况(只定义了CONFIG_VIDEO_LOGO)是如上图所示的企鹅(如果还定义了CONFIG_VIDEO_BMP_LOGO会是denx的标志),这个是存在于uboot代码中的一个头文件(include/video_logo.h或 bmp_logo.h),如果大家看了这个头文件,发现这个是一个巨大的结构体,其中保存着图片每个像素点的色彩数据。 这样如果要更换这个默认的logo岂不是自己要生成这样一个数据结构体才行?答案是肯定的。 但是这样一个结构体要怎么生成呢?这个uboot源码早就为我们想好了,方法其实很简单:
一、准备一张jpeg图片,通过命令行处理为8bit BMP图片。 处理脚本如下:
#!/bin/sh
#install Netpbm first
jpegtopnm $1 | ppmquant 31 | ppmtobmp -bpp 8 > $2
使用方法: (脚本名) ( 待处理的JPG图片名) (输出文件名)
之所以用jpeg转bmp的办法,是通过实验证明这种方面可行且简便。 图片的大小不一定要和原来一样,你觉得合适就好。
二、将bmp文件放入/tools/logos中,并修改/tools/下的Makefile
# Generated LCD/video logo
LOGO_H = $(OBJTREE)/include/bmp_logo.h
LOGO-$(CONFIG_LCD_LOGO) += $(LOGO_H)
LOGO-$(CONFIG_VIDEO_LOGO) += $(LOGO_H)
ifeq ($(LOGO_BMP),)
LOGO_BMP= logos/denx.bmp
endif
ifeq ($(VENDOR),atmel)
LOGO_BMP= logos/atmel.bmp
endif
ifeq ($(VENDOR),esd)
LOGO_BMP= logos/esd.bmp
endif
ifeq ($(VENDOR),freescale)
LOGO_BMP= logos/freescale.bmp
endif
ifeq ($(VENDOR),ronetix)
LOGO_BMP= logos/ronetix.bmp
endif
ifeq ($(VENDOR),syteco)
LOGO_BMP= logos/syteco.bmp
endif
红色字体,替换为你制作的bmp文件名。
三、确认配置文件 一定要定义
在u-boot/include/configs/sunxi-common.h 里面增加下面两个宏定义
#define CONFIG_VIDEO_LOGO
#define CONFIG_VIDEO_BMP_LOGO
编译的时候,你的bmp文件会被tools/bmp_logo.c编译出的工具bmp_logo制作成include/bmp_logo.h,并编译进uboot中。
四、重新编译u-boot即可得到显示新logo的u-boot。
效果如下图所示:
由于是8bit色深,颜色就有点怪~
如果你看了drivers/video/cfb_console.c源码,你可能会发现还有一个splashimage的东东可以显示。是的,如果你有张非压缩的BMP图片放在了Nor
Flash,你可以在ENV中设置splashimage和splashpos告诉uboot读取和显示的位置。启动的时候,uboot就会显示这个bmp图片。但是,原生的uboot是只支持Nor
Flash和内核的读取的,如果你的图片放在nand flash、SD卡或者SPI、I2C
接口flash中,你可以自己实现将图片文件读取到内存中,然后再显示splash。实现起来并不复杂,关键是使用相关的API函数来读取数据。
UBOOT版本:2018.01
实验目标:u-boot启动后点亮3个led灯
u-boot启动过程中会调用crt0.S汇编代码,在该汇编代码中点亮LED.
LED对于引脚如下:
REG –GPE4
GREEN – GPE5
YELLOW – GPE6
1、GPIO驱动实现
u-boot的驱动程序都放在drivers目录下。
LED驱动属于GPIO驱动。
所以led驱动应该写在drivers\gpio目录下,下面是已经实现的sunxi_gpio.c驱动。
详细代码可查阅:u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c
sunxi_gpio.c里的函数在u-boot-nano-v2018.01/include/asm-generic/gpio.h头文件中被声明。
2、LED驱动实现,这部前需要先实现上面的GPIO驱动
在board目录下添加led.c,代码如下
#include <common.h>
#include <asm/io.h>
#include <asm/arch/gpio.h>
#include <status_led.h>
#include <asm-generic/gpio.h> /*下面函数在这个头文件中声明*/
//int gpio_direction_output(unsigned gpio, int value);
//初始化 LED(PE4、PE5、PE6)
void coloured_LED_init(void)
{
/* Clock is enabled in board_early_init_f() */
//gpio_direction_output函数在u-boot-nano-v2018.01\drivers\gpio\sunxi_gpio.c中实现,这里直接调用就可以了
gpio_direction_output(CONFIG_RED_LED, 0);
gpio_direction_output(CONFIG_GREEN_LED, 0);
gpio_direction_output(CONFIG_YELLOW_LED, 0);
}
#ifdef CONFIG_RED_LED
void red_led_on(void)
{
gpio_set_value(CONFIG_RED_LED, 1);
}
void red_led_off(void)
{
gpio_set_value(CONFIG_RED_LED, 0);
}
#endif
#ifdef CONFIG_GREEN_LED
void green_led_on(void)
{
gpio_set_value(CONFIG_GREEN_LED, 1);
}
void green_led_off(void)
{
gpio_set_value(CONFIG_GREEN_LED, 0);
}
#endif
#ifdef CONFIG_YELLOW_LED
void yellow_led_on(void)
{
gpio_set_value(CONFIG_YELLOW_LED,1);
}
void yellow_led_off(void)
{
gpio_set_value(CONFIG_YELLOW_LED, 0);
}
#endif
注意:#include <asm-generic/gpio.h> 头文件不能少。
然后编辑led.c同目录下的Makefile文件,把led.o编译进去。
Makefile中添加如下一行:
obj-$(CONFIG_SUNXI_LED ) += led.o
3、配置声明
在include/configs/suniv.h中添加如下声明。
#define CONFIG_SUNXI_LED 1 /*开启LED支持*/
#define CONFIG_RED_LED 132 /*PGE4*/
#define CONFIG_GREEN_LED 133 /*PGE5*/
#define CONFIG_YELLOW_LED 134 /*PGE6*/
4、在crt0.S汇编代码中点亮LED
在crt0.S中调用以下函数点亮3个led灯:
bl coloured_LED_init
bl red_led_on
bl green_led_on
bl yellow_led_on
5、编译下载:
cd “你的uboot目录”
# 编译
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j8
# usb下载u-boot目标板
sunxi-fel uboot ./u-boot-sunxi-with-spl.bin