- 笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel与内核进程
TeYiToKu
X210嵌入式学习整理笔记汇编linux嵌入式硬件c语言单片机
kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head.text的段。内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kernel启动由bootloader进行构建
- 编译OpenHarmony出错小结 FAILED: load BTF from vmlinux: Unknown error -22
caimouse
鸿蒙系统应用开发harmonyos华为
在编译开源鸿蒙系统4.0版本时,遇到了不少问题,由于之前对于这个系统了解少,也不太确定是哪里出问题,所以走了不少弯路。一开始就尝试使用WSL来进行编译,这样可以省了虚拟机的安装,但是测试了一下,发现编译不通过,老是出错,这条路看来是走不通了,只能另外想办法。接着下来还是选择安装虚拟机的方式。虚拟机又有很多种,最后选择了VirtualBox,这样安装就比较方便了。我的电脑系统是WIN11作为主机操作
- Linux第47步_安装支持linux的第三方库和mkimage工具
LaoZhangGong123
产品研发linux服务器经验分享STM32
安装支持linux的第三方库和mkimage工具,做好移植前的准备工作。编译linux内核之前,需要先在ubuntu上安装“lzop库”和“libssl-dev库”,否则内核编译会失败。mkimage工具会在zImage镜像文件的前面添加0x40个字节的头部信息,就可以得到uImage镜像文件。因此,需要安装mkimage工具。1、打开终端输入“sudoapt-getupdate回车”,在安装前,
- iTop-4412刷机方式详解(2)
Kilento
Exynos4412嵌入式系统烧写
续>iTop-4412刷机方式详解(1)2.Android4.0.3的烧写(USB烧写到eMMC)2.1准备工作1)硬件准备:开发板、电源、串口线、MicroUSB线2)软件及驱动准备:ADB驱动、串口驱动、SecureCRT3)安装镜像(压缩包):u-boot-iTOP-4412.bin(U-boot,通用引导程序)zImage(kernel,内核)ramdisk-uboot.img和syste
- iTop-4412 刷机方式详解(3)
Kilento
Exynos4412嵌入式系统烧写
续>iTop-4412刷机方式详解(2)4.Android4.0.3的烧写(USB烧写到TF卡)4.1准备工作1)硬件准备:开发板、电源、串口线、MicroUSB线、TF卡2)软件及驱动准备:ADB驱动、串口驱动、SecureCRT3)安装镜像(压缩包):u-boot-iTOP-4412.bin(U-boot,通用引导程序)zImage(kernel,内核)ramdisk-uboot.img和sy
- uboot基础
✎﹏ℳ๓无情❦
Linux#UbuntuI.MX6U-ALPHA开发板linux运维服务器
一、何为uboot?1、uboot是一个裸机程序,比较复杂。2、uboot就是一个bootloader,作用就是用于启动Linux或其他系统。Uboot最主要的工作就是初始化DDR。因为Linux是运行在DDR里面的。一般Linux镜像zImage(uImage)+设备树(.dtb)存放在SD、EMMC、NAND、SPIFLASH等等外置存储区域。这里就牵扯到一个问题,需要将Linux镜像从外置f
- Android 开机流程介绍
林奋斗同学
Androidandroid
文章目录一、目的二、环境三、相关概念3.1Android平台架构3.2Android启动架构3.3zImage3.4RAMDISK3.5RC文件四、详细设计4.1BootRom4.2BootLoader4.3Kernel4.3.1zImage解压缩阶段4.3.2kernel的汇编启动阶段4.3.3Kernel的C启动阶段4.3.3.1kernel启动log4.3.3.2init进程&kthread
- 高通平台死机分析
u影动
QCOM--调试经验Crash
高通平台死机分析抓取死机dump连接USB,设备管理器有端口900E打开QPSTconfiguration,自动保存dump,路径:C:\ProgramData\Qualcomm\QPST\Sahara\Port_COM145dump抓取完成后,手机会自动重启找到对应的符号表vmlinux如何判断vmlinux是否与死机版本对应?用UE打开vmlinux,查找关键字"SMPPREEMPT",会输出
- 使用orangepi玩linux
桃成蹊2.0
IMX6ULL记录linux设备使用记录linux运维服务器
最近看了这个大佬的文章,写了使用远程来挂载linux的方案,觉得还是很有意思的,瞬间感觉linux这块都还是相通的,就跑了一下,果然,牛逼!香橙派全志H3烧录Uboot,远程加载zImage,dtb,rootfs但是这个博主只讲了用网络挂载,我觉得还可以弄个本地的,这样更方便。下面说一下具体的流程:1、编译uboot和烧写这里我用了和博主一样的文件,解压安装就完事这里注意一下交叉编译器的安装,参考
- 嵌入式局域网通信方式——TFTP
有名企梦的小菜鸡
嵌入式学习信息与通信物联网单片机
文章目录一、TFTP是什么?二、主要特点三、工作流程总结一、TFTP是什么?TFTP是一种简单的文件传输协议,它是在UDP协议的基础上实现的。TFTP协议最初是由RFC783定义的,它的主要目的是为了在网络上快速、简单地传输文件。TFTP协议主要应用于网络引导、配置文件传输等场景,它的特点是简单、轻量级、易于实现。可以使用TFTP来加载内核zImage、设备树和其他较小的文件到开发板DDR上,从而
- qemu调试linux内核
chenxuezhou
linux
qemu-kernelarch/x86/boot/bzImage-s-S#-SfreezeCPUatstartup#-sshorthandfor-gdbtcp::1234若不想使用1234端口,则可以使用-gdbtcp:xxxx来取代-s选项(gdb)filelinux-3.18.6/vmlinux#在gdb界面中targeremote之前加载符号表(gdb)targetremote:1234#建
- 事务测试出错:file /usr/share/mysql/charsets/README from install of MySQL-server-5.5.48-1.linux2.6.x86_64
冰棍hfv
bugmysqlcentoslinux
项目场景:在VMLinux下安装(MySQL-server-5.5.48-1.linux2.6.x86_64.rpm)时报错问题描述在下载安装的时候报错:事务测试出错:file/usr/share/mysql/charsets/READMEfrominstallofMySQL-server-5.5.48-1.linux2.6.x86_64conflictswithfilefrompackagemy
- linux开发板加载内核、设备树、根文件系统的三种方式以及EMMC加载uboot方式
ssz__
Linux学习笔记操作系统linux运维服务器ubuntu学习
目录一、通过tftp加载内核和根文件系统二、通过emmc加载内核和根文件系统三、tftp加载linux内核,nfs挂载rootfs四、将uboot安装到EMMC开发板通过SD卡进行启动,SD卡中加载的有uboot一、通过tftp加载内核和根文件系统1.将uImage内核镜像文件、dtb设备树文件以及ramdisk.img根文件系统放在ubuntu服务器的tftpboot文件夹下修改文件的权限:su
- 基于sdrpi的openwifi实践4:制作openwifi的启动盘
mcupro
SDRPI软件无线电java开发语言
我们在上述的实践里面生成了boot.bin以及内核uImage和可加载动态驱动ko文件。这个博客我们制作openwifi的启动盘,并将上几个实践中由源码编译生成的文件更新到这个启动盘里面,进行实际的运行。1,首先从www.github.com/open-sdr/openwifi中下载已经做好的SD卡映像(SD卡和TF卡只是大小外观的差别习惯,我们之说SD卡)。2,下载下来以后解压缩,得到一个.im
- vmlinux, vmlinux.bin, bzImage; cmake的find_package(Clang)新增了哪些变量( 比较两次记录的所有变量差异)
ziix
vmlinuxbzImage
vmlinux,vmlinux.bin,bzImagecd/bal/linux-stable/filevmlinux#vmlinux:ELF32-bitLSBexecutable,Intel80386,version1(SYSV),staticallylinked,BuildID[sha1]=b99bbd9dda1ec2751da246d4a7ae4e6fcf7d789b,notstripped#
- 整理内核编译流程:uImage/zImage/Image/vmlinx之间关系
高高的博客
arm开发linux运维
整理内核编译流程:uImage/zImage/Image/vmlinx之间关系1、Image和内核顶层目录下vmlinx关系?vmlinux通过objcopy格式化转换为Image2、rch/arm/boot/compressedvmlinux文件和Image之间关系?将Image镜像文件经过gzip压缩生成rch/arm/boot/compressed/vmlinx镜像文件3、zImage和ar
- Ubuntu安装上的vmlinux在哪里?
victoruu
LinuxTroubleShooting
问题描述我正在尝试启动oprofile,并且在此步骤遇到了问题:opcontrol--vmlinux=/path/to/vmlinuxUbuntu没有名为vmlinux的软件包,当我执行locatevmlinux时,会得到很多文件:/usr/src/linux-headers-2.6.28-14/arch/h8300/boot/compressed/vmlinux.lds/usr/src/linu
- ubuntu内核转储分析——kdump和crash的下载和使用
执剑走天涯xp
ubuntu
ubuntu内核转储分析——kdump和crash的下载和使用内存转储机制需要用到的工具kexeckdumpcrash安装kdump确认kdump-tool是否启用修改USER_KDUMP修改crashkernel更新grub配置重启系统以使配置生效手动触发内核崩溃,生成转储文件设置内核崩溃系统自动重启使用crash调试查看是否存在vmlinux下载namelist:使用crash命令查看内核转储
- 编译生成uImage过程——mips平台
45°的阳光
linux系统相关知识u-boot
在使用tftp移植过程中,tftp移植的镜像格式uImage,在使用厂家提供的kernel编译时,直接make生成uImage是行不通的一、直接生成uImage1.选这对应的板子以mips为例,下图是不同板子的内核配置2.选定一个类型的板子复制配置到.config中3.makemenguconfig是刚才复制过来的.config生效4.编译uImage,makeuImage二、uImage和zIm
- uboot-tool工具命令mkimage详解
T345821588
linuxubuntu运维
通常,u-boot为kernel提供一些kernel无法知道的信息,比如ramdisk在RAM中的地址。Kernel也必须为U-boot提供必要的信息,如通过mkimage这个工具(在u-boot代码的tools目录中,可以将其拷到/usr/bin/,以后方便使用,注意保持权限)可以给zImage添加一个header,也就是使得通常编译的内核zImage添加一个数据头,把添加头后的image通常叫
- uboot学习及内核更换_incomplete
香蕉割草机
嵌入式ubootmkimagekernel
官方文档在前面文章目录uboot常见命令学习环境变量网络控制台uboot标准启动其他升级uboot或内核bin和uimg以及booti和bootm的区别制作uImage更换内核更换uboot后续计划uboot常见命令学习环境变量EnvironmentVariables环境变量autostart如果值为yes,则会在以下命令后自动执行bootm加载镜像bootelf-BootfromanELFima
- lv13 内核模块动态添加新功能 6
4IOT
嵌入式开发linuxarm开发
1动态加载法即新功能源码与内核其它源码不一起编译,而是独立编译成内核的插件(被称为内核模块)文件.ko1.1新功能源码与Linux内核源码在同一目录结构下时给新功能代码配置Kconfig(模块代码与上一级相同)给新功能代码改写Makefilemakemenuconfig界面里将新功能对应的那项选择成makeuImagecparch/arm/boot/uImage/tftpboot(复制uImage
- lv13 内核模块静态添加功能 5
4IOT
嵌入式开发linuxarm开发
一、向内核添加新功能(把程序添加到内核启动)1.1静态加载法:即新功能源码与内核其它代码一起编译进uImage文件内新功能源码与Linux内核源码在同一目录结构下在linux-3.14/driver/char/目录下编写myhello.c,文件内容如下:#include#includeint__initmyhello_init(void){printk("####################
- lv13 环境搭建之内核编译 4
4IOT
嵌入式开发arm开发linux移植
一、开发板运行Linux1.网线连接开发板和主机2.ubuntu下拷贝uImage、exynos4412-fs4412.dtb两个文件到/tftpboot目录下 cd~/fs4412 cpuImageexynos4412-fs4412.dtb/tftpboot3.rootfs.tar.xz解压到/opt/4412 sudotarxvfrootfs.tar.xz-C/opt/4412 sudochm
- linux 内核入口地址,Linux内核程序入口地址
寒山皓月
linux内核入口地址
在Linux内核中,使用vmlinux.lds.S文件(路径:arch/arm64/kernel/)布局内核映像中相关段(例:.text、.data)的位置。在Linux内核编译时,vmlinux.lds.S文件最终会被构建成链接脚本vmlinux.lds文件(路径:arch/arm64/kernel/)。本文主要介绍Linux内核程序运行的起始位置_text,在vmlinux.lds.S文件中定
- 树莓派Linux源码配置,内核编译以及内核更换
都教授_
树莓派Linux入门linuxubuntu运维
目录1、Linux内核源码目录树分析1.1了解linux内核源码:1.2了解源码目录树的结构2、树莓派Linux的源码配置2.1内核源码下载说明2.2三种方法配置源码2.2.1方式一2.2.2方式二:2.2.3方式三3、Linux内核编译:4、Linux内核镜像拷贝至树莓派并启动新内核:4.1操作步骤说明:4.1.1打包zImage文件。打包zImage成树莓派可用的xxx.img4.1.2镜像的
- Linux Kernel编译流程 (二)
Konwledging
linux内核
1vmlinux研究vmlinux文件的产生,zImage和Image产生LinuxKernel4.18.20SourceInsight3.5Ubuntu18.04arm-linux-gnueabi-xxx1.1findalltarget首先当我们执行sudomakeARCH=armCROSS_COMPILE=arm-linux-gnueabi-命令后,默认的target是_all,所以我们首先在
- (好文重发)朴英敏:用crash工具分析Linux内核死锁的一次实战
宋宝华
本文简介:内核死锁问题一般是读写锁(rw_semaphore)和互斥锁(mutex)引起的,本文主要讲如何通过ramdump+crash工具来分析这类死锁问题。作者简介:朴英敏,现就职于国内一家手机研发公司,任职资深系统工程师,主要负责安卓系统方面的调试工作。0、背景知识点ramdump是内存转存机制,我们可以在某个时刻把系统的内存转存到一个文件中,然后与符号信息(vmlinux)一起导入到tra
- EMMC中的文件修改
火红色祥云
Linux学习过程笔记
EMMC中的文件修改lsmmc1:1发现其中的文件并不是自己修改之后的Linux镜像文件和修改后的设备树,->修改修改:fatwritemmc1:180800000zImage0x(文件大小)fatwritemmc1:183000000imx6ull-lux-emmc.dtb0x(文件大小)出现问题:无法识别fatwrite命令解决:在u-boot中include/configs/imx6ull-
- [笔记] linux 4.19 版本 Kbuild 编译流程解析
嵌入式小小怪下士
linux笔记
目录写在前面与一些说明linux编译工程框架KbuildTop-Makefile文件linux编译命令makehelpdistclean目标defconfig目标build变量与$(build)=dir赋值使用obj变量实现包含目标模块下的makefiledefconfig规则展开defconfig的生成命令解析make默认目标生成image.gz镜像与.dtb设备树文件vmlinux编译生成流程
- java杨辉三角
3213213333332132
java基础
package com.algorithm;
/**
* @Description 杨辉三角
* @author FuJianyong
* 2015-1-22上午10:10:59
*/
public class YangHui {
public static void main(String[] args) {
//初始化二维数组长度
int[][] y
- 《大话重构》之大布局的辛酸历史
白糖_
重构
《大话重构》中提到“大布局你伤不起”,如果企图重构一个陈旧的大型系统是有非常大的风险,重构不是想象中那么简单。我目前所在公司正好对产品做了一次“大布局重构”,下面我就分享这个“大布局”项目经验给大家。
背景
公司专注于企业级管理产品软件,企业有大中小之分,在2000年初公司用JSP/Servlet开发了一套针对中
- 电驴链接在线视频播放源码
dubinwei
源码电驴播放器视频ed2k
本项目是个搜索电驴(ed2k)链接的应用,借助于磁力视频播放器(官网:
http://loveandroid.duapp.com/ 开放平台),可以实现在线播放视频,也可以用迅雷或者其他下载工具下载。
项目源码:
http://git.oschina.net/svo/Emule,动态更新。也可从附件中下载。
项目源码依赖于两个库项目,库项目一链接:
http://git.oschina.
- Javascript中函数的toString()方法
周凡杨
JavaScriptjstoStringfunctionobject
简述
The toString() method returns a string representing the source code of the function.
简译之,Javascript的toString()方法返回一个代表函数源代码的字符串。
句法
function.
- struts处理自定义异常
g21121
struts
很多时候我们会用到自定义异常来表示特定的错误情况,自定义异常比较简单,只要分清是运行时异常还是非运行时异常即可,运行时异常不需要捕获,继承自RuntimeException,是由容器自己抛出,例如空指针异常。
非运行时异常继承自Exception,在抛出后需要捕获,例如文件未找到异常。
此处我们用的是非运行时异常,首先定义一个异常LoginException:
/**
* 类描述:登录相
- Linux中find常见用法示例
510888780
linux
Linux中find常见用法示例
·find path -option [ -print ] [ -exec -ok command ] {} \;
find命令的参数;
- SpringMVC的各种参数绑定方式
Harry642
springMVC绑定表单
1. 基本数据类型(以int为例,其他类似):
Controller代码:
@RequestMapping("saysth.do")
public void test(int count) {
}
表单代码:
<form action="saysth.do" method="post&q
- Java 获取Oracle ROWID
aijuans
javaoracle
A ROWID is an identification tag unique for each row of an Oracle Database table. The ROWID can be thought of as a virtual column, containing the ID for each row.
The oracle.sql.ROWID class i
- java获取方法的参数名
antlove
javajdkparametermethodreflect
reflect.ClassInformationUtil.java
package reflect;
import javassist.ClassPool;
import javassist.CtClass;
import javassist.CtMethod;
import javassist.Modifier;
import javassist.bytecode.CodeAtt
- JAVA正则表达式匹配 查找 替换 提取操作
百合不是茶
java正则表达式替换提取查找
正则表达式的查找;主要是用到String类中的split();
String str;
str.split();方法中传入按照什么规则截取,返回一个String数组
常见的截取规则:
str.split("\\.")按照.来截取
str.
- Java中equals()与hashCode()方法详解
bijian1013
javasetequals()hashCode()
一.equals()方法详解
equals()方法在object类中定义如下:
public boolean equals(Object obj) {
return (this == obj);
}
很明显是对两个对象的地址值进行的比较(即比较引用是否相同)。但是我们知道,String 、Math、I
- 精通Oracle10编程SQL(4)使用SQL语句
bijian1013
oracle数据库plsql
--工资级别表
create table SALGRADE
(
GRADE NUMBER(10),
LOSAL NUMBER(10,2),
HISAL NUMBER(10,2)
)
insert into SALGRADE values(1,0,100);
insert into SALGRADE values(2,100,200);
inser
- 【Nginx二】Nginx作为静态文件HTTP服务器
bit1129
HTTP服务器
Nginx作为静态文件HTTP服务器
在本地系统中创建/data/www目录,存放html文件(包括index.html)
创建/data/images目录,存放imags图片
在主配置文件中添加http指令
http {
server {
listen 80;
server_name
- kafka获得最新partition offset
blackproof
kafkapartitionoffset最新
kafka获得partition下标,需要用到kafka的simpleconsumer
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.
- centos 7安装docker两种方式
ronin47
第一种是采用yum 方式
yum install -y docker
 
- java-60-在O(1)时间删除链表结点
bylijinnan
java
public class DeleteNode_O1_Time {
/**
* Q 60 在O(1)时间删除链表结点
* 给定链表的头指针和一个结点指针(!!),在O(1)时间删除该结点
*
* Assume the list is:
* head->...->nodeToDelete->mNode->nNode->..
- nginx利用proxy_cache来缓存文件
cfyme
cache
user zhangy users;
worker_processes 10;
error_log /var/vlogs/nginx_error.log crit;
pid /var/vlogs/nginx.pid;
#Specifies the value for ma
- [JWFD开源工作流]JWFD嵌入式语法分析器负号的使用问题
comsci
嵌入式
假如我们需要用JWFD的语法分析模块定义一个带负号的方程式,直接在方程式之前添加负号是不正确的,而必须这样做:
string str01 = "a=3.14;b=2.71;c=0;c-((a*a)+(b*b))"
定义一个0整数c,然后用这个整数c去
- 如何集成支付宝官方文档
dai_lm
android
官方文档下载地址
https://b.alipay.com/order/productDetail.htm?productId=2012120700377310&tabId=4#ps-tabinfo-hash
集成的必要条件
1. 需要有自己的Server接收支付宝的消息
2. 需要先制作app,然后提交支付宝审核,通过后才能集成
调试的时候估计会真的扣款,请注意
- 应该在什么时候使用Hadoop
datamachine
hadoop
原帖地址:http://blog.chinaunix.net/uid-301743-id-3925358.html
存档,某些观点与我不谋而合,过度技术化不可取,且hadoop并非万能。
--------------------------------------------万能的分割线--------------------------------
有人问我,“你在大数据和Hado
- 在GridView中对于有外键的字段使用关联模型进行搜索和排序
dcj3sjt126com
yii
在GridView中使用关联模型进行搜索和排序
首先我们有两个模型它们直接有关联:
class Author extends CActiveRecord {
...
}
class Post extends CActiveRecord {
...
function relations() {
return array(
'
- 使用NSString 的格式化大全
dcj3sjt126com
Objective-C
格式定义The format specifiers supported by the NSString formatting methods and CFString formatting functions follow the IEEE printf specification; the specifiers are summarized in Table 1. Note that you c
- 使用activeX插件对象object滚动有重影
蕃薯耀
activeX插件滚动有重影
使用activeX插件对象object滚动有重影 <object style="width:0;" id="abc" classid="CLSID:D3E3970F-2927-9680-BBB4-5D0889909DF6" codebase="activex/OAX339.CAB#
- SpringMVC4零配置
hanqunfeng
springmvc4
基于Servlet3.0规范和SpringMVC4注解式配置方式,实现零xml配置,弄了个小demo,供交流讨论。
项目说明如下:
1.db.sql是项目中用到的表,数据库使用的是oracle11g
2.该项目使用mvn进行管理,私服为自搭建nexus,项目只用到一个第三方 jar,就是oracle的驱动;
3.默认项目为零配置启动,如果需要更改启动方式,请
- 《开源框架那点事儿16》:缓存相关代码的演变
j2eetop
开源框架
问题引入
上次我参与某个大型项目的优化工作,由于系统要求有比较高的TPS,因此就免不了要使用缓冲。
该项目中用的缓冲比较多,有MemCache,有Redis,有的还需要提供二级缓冲,也就是说应用服务器这层也可以设置一些缓冲。
当然去看相关实现代代码的时候,大致是下面的样子。
[java]
view plain
copy
print
?
public vo
- AngularJS浅析
kvhur
JavaScript
概念
AngularJS is a structural framework for dynamic web apps.
了解更多详情请见原文链接:http://www.gbtags.com/gb/share/5726.htm
Directive
扩展html,给html添加声明语句,以便实现自己的需求。对于页面中html元素以ng为前缀的属性名称,ng是angular的命名空间
- 架构师之jdk的bug排查(一)---------------split的点号陷阱
nannan408
split
1.前言.
jdk1.6的lang包的split方法是有bug的,它不能有效识别A.b.c这种类型,导致截取长度始终是0.而对于其他字符,则无此问题.不知道官方有没有修复这个bug.
2.代码
String[] paths = "object.object2.prop11".split("'");
System.ou
- 如何对10亿数据量级的mongoDB作高效的全表扫描
quentinXXZ
mongodb
本文链接:
http://quentinXXZ.iteye.com/blog/2149440
一、正常情况下,不应该有这种需求
首先,大家应该有个概念,标题中的这个问题,在大多情况下是一个伪命题,不应该被提出来。要知道,对于一般较大数据量的数据库,全表查询,这种操作一般情况下是不应该出现的,在做正常查询的时候,如果是范围查询,你至少应该要加上limit。
说一下,
- C语言算法之水仙花数
qiufeihu
c算法
/**
* 水仙花数
*/
#include <stdio.h>
#define N 10
int main()
{
int x,y,z;
for(x=1;x<=N;x++)
for(y=0;y<=N;y++)
for(z=0;z<=N;z++)
if(x*100+y*10+z == x*x*x
- JSP指令
wyzuomumu
jsp
jsp指令的一般语法格式: <%@ 指令名 属性 =”值 ” %>
常用的三种指令: page,include,taglib
page指令语法形式: <%@ page 属性 1=”值 1” 属性 2=”值 2”%>
include指令语法形式: <%@include file=”relative url”%> (jsp可以通过 include