windows下进行嵌入式系统开发工程管理编译方案

来源:互联网 发布:百度网盘vip淘宝 编辑:程序博客网 时间:2024/04/30 14:36

在windows下进行 arm工程管理及编译方案中,很多小项目均采用现有成熟大型的开发平台,如keil或者IAR,其优点是简单易上手,创建工程相对比较简单,并还提供相应的在线单步调试功能,但灵活性不好,无法自由配置;

基于此,使用bat批处理+makefile方案将自由灵活地解决arm嵌入式工程管理工作,其优点是可自由配置管理工程,无需依赖任何开发平台,但对工程师基本功要求较高,需要较深入理解makefile知识,具体事例如下:


bat批处理部分(build.bat):

set COMPILER_TOOLKIT=GCC
set GCC_BIN_PATH=C:\Progra~1\GNUARM.410\arm-elf\bin
set GCC_INC_PATH=C:\Progra~1\GNUARM.410\arm-elf\include -I C:\Progra~1\GNUARM.410\lib\gcc\arm-elf\4.1.0\include
set GCC_LIB_PATH=C:\Progra~1\GNUARM.410\arm-elf\lib -L C:\Progra~1\GNUARM.410\lib\gcc\arm-elf\4.1.0
set PATH=c:\make381;C:\Program Files\GNUARM.410\bin;C:\Program Files\GNUARM.410\arm-elf\bin;C:\Program Files\GNUARM.410\libexec\gcc\arm-elf\4.1.0


set VERSION=x.xx
del ..\code\inc\version.h

echo>>..\code\inc\version.h 



set TARGET=xxx_project
make -s %1 all #%1则表示可以执行build.bat时可以传一个参数
BcmIamgeBuild xxx  #执行完毕make工作后再可执行一些其他工作


objdump -d bin\%TARGET%_raw.elf >bin\asm1.txt
objdump -D bin\%TARGET%_raw.elf >bin\asm2.txt
objdump -t bin\%TARGET%_raw.elf >bin\sys.txt



makefile部分:


VERSION = 1.0.1f
OUTPUT = libopenssl($(VERSION)).a


BIN = bin
OBJ = obj
SRC =..\crypto
CROSS = arm-elf-


CC = $(CROSS)gcc 
SIZE = $(CROSS)size
STRIP = $(CROSS)strip
OBJCOPY = $(CROSS)objcopy
AR = $(CROSS)ar


CFLAGS = -I..\crypto -I..\crypto\asn1 -I..\crypto\evp -I..\crypto\modes -I.. -I..\include\


LIBS   += C:\Progra~1\GNUARM.410\arm-elf\lib\libc.a C:\Progra~1\GNUARM.410\lib\gcc\arm-elf\4.1.0\libgcc.a 


VPATH += $(wildcard $(SRC)) $(wildcard $(SRC)/*) $(wildcard $(SRC)/*/*) $(wildcard $(SRC)/*/*/*)


#aes path
C_OBJECTS  +=  aes_wrap.o aes_cbc.o aes_cfb.o aes_core.o aes_ctr.o aes_ecb.o aes_ige.o aes_misc.o aes_ofb.o aes_x86core.o


#asnl path
C_OBJECTS  += a_strnid.o
C_OBJECTS  += ameth_lib.o asn1_err.o asn1_gen.o asn1_lib.o asn1_par.o asn_mime.o asn_moid.o asn_pack.o a_bitstr.o a_bool.o
C_OBJECTS  += a_bytes.o a_d2i_fp.o a_digest.o a_dup.o a_enum.o a_gentm.o a_i2d_fp.o a_int.o a_mbstr.o a_object.o a_octet.o
C_OBJECTS  += a_print.o a_set.o a_sign.o a_strex.o a_time.o a_type.o a_utctm.o a_utf8.o a_verify.o bio_asn1.o
C_OBJECTS  += bio_ndef.o d2i_pr.o d2i_pu.o evp_asn1.o f_enum.o f_int.o f_string.o i2d_pr.o i2d_pu.o nsseq.o n_pkey.o p5_pbe.o
C_OBJECTS  += p5_pbev2.o p8_pkey.o tasn_dec.o tasn_enc.o tasn_fre.o tasn_new.o tasn_prn.o tasn_typ.o tasn_utl.o t_bitst.o
C_OBJECTS  += t_crl.o t_pkey.o t_req.o t_spki.o t_x509.o t_x509a.o x_algor.o x_attrib.o x_bignum.o x_crl.o x_exten.o x_info.o
C_OBJECTS  += x_long.o x_name.o x_nx509.o x_pkey.o x_pubkey.o x_req.o x_sig.o x_spki.o x_val.o x_x509.o x_x509a.o


#bf path
C_OBJECTS  += bf_cbc.o bf_cfb64.o bf_ecb.o bf_enc.o bf_ofb64.o bf_skey.o


#bio path 
#C_OBJECTS  += bss_acpt.o bss_bio.o bss_conn.o bss_dgram.o 
#C_OBJECTS  += bf_buff.o bf_lbuf.o bf_nbio.o bf_null.o bio_cb.o bio_err.o bio_lib.o b_print.o  bss_null.o bss_mem.o b_dump.o bss_file.o
#C_OBJECTS  += bss_fd.o bss_file.o bss_log.o bss_null.o bss_rtcp.o bss_sock.o b_dump.o b_print.o b_sock.o


#bn path
C_OBJECTS  += bn_add.o bn_asm.o bn_blind.o bn_const.o bn_ctx.o bn_depr.o bn_div.o bn_err.o bn_exp.o bn_exp2.o
C_OBJECTS  += bn_gcd.o bn_gf2m.o bn_kron.o bn_lib.o bn_mod.o bn_mont.o bn_mpi.o bn_mul.o bn_nist.o bn_prime.o bn_print.o bn_rand.o
C_OBJECTS  += bn_recp.o bn_shift.o bn_sqr.o bn_sqrt.o bn_word.o bn_x931p.o


#buffer path
C_OBJECTS  += buffer.o buf_err.o buf_str.o


#camellia path
C_OBJECTS  += camellia.o cmll_cbc.o cmll_cfb.o cmll_ctr.o cmll_ecb.o cmll_misc.o cmll_ofb.o cmll_utl.o


#cast path
C_OBJECTS  += c_cfb64.o c_ecb.o c_enc.o c_ofb64.o c_skey.o


#camc path
C_OBJECTS  += cmac.o cm_ameth.o cm_pmeth.o


#cms path
C_OBJECTS  += cms_asn1.o cms_att.o cms_cd.o cms_dd.o cms_enc.o cms_env.o cms_err.o cms_ess.o cms_io.o cms_lib.o cms_pwri.o cms_sd.o cms_smime.o


#comp path
C_OBJECTS  += comp_err.o comp_lib.o c_rle.o c_zlib.o


#comp path
C_OBJECTS  += conf_api.o conf_def.o conf_err.o conf_lib.o conf_mall.o conf_mod.o conf_sap.o


#des path
#C_OBJECTS  += read_pwd.o 
C_OBJECTS  += cbc3_enc.o cbc_cksm.o cbc_enc.o cfb64ede.o cfb64enc.o cfb_enc.o des_enc.o des_old.o des_old2.o
C_OBJECTS  += ecb3_enc.o ecb_enc.o ede_cbcm_enc.o enc_read.o enc_writ.o fcrypt.o fcrypt_b.o ncbc_enc.o ofb64ede.o ofb64enc.o ofb_enc.o
C_OBJECTS  += pcbc_enc.o qud_cksm.o rand_key.o read2pwd.o rpc_enc.o set_key.o str2key.o xcbc_enc.o


#dh path
C_OBJECTS  += dh_ameth.o dh_asn1.o dh_check.o dh_depr.o dh_err.o dh_gen.o dh_key.o dh_lib.o dh_pmeth.o dh_prn.o


#dsa path
C_OBJECTS  += dsa_ameth.o 
C_OBJECTS  += dsa_asn1.o dsa_depr.o dsa_err.o dsa_gen.o dsa_key.o dsa_lib.o dsa_ossl.o dsa_pmeth.o
C_OBJECTS  += dsa_prn.o dsa_sign.o dsa_vrf.o


#dso path
C_OBJECTS  += dso_beos.o dso_dl.o dso_dlfcn.o dso_err.o dso_lib.o dso_null.o dso_openssl.o dso_vms.o dso_win32.o


#ec path
#C_OBJECTS  += ecp_nistp224.o ecp_nistp256.o ecp_nistp521.o 
C_OBJECTS  += ec2_mult.o ec2_oct.o ec2_smpl.o eck_prn.o ecp_mont.o ecp_nist.o  ecp_nistputil.o
C_OBJECTS  += ecp_oct.o ecp_smpl.o  ec_asn1.o ec_check.o ec_curve.o ec_cvt.o ec_err.o ec_key.o ec_lib.o ec_mult.o
C_OBJECTS  += ec_oct.o ec_pmeth.o ec_print.o
C_OBJECTS  += ech_err.o ech_key.o ech_lib.o ech_ossl.o ec_ameth.o


#ecdsa path
C_OBJECTS  += ecs_asn1.o ecs_err.o ecs_lib.o ecs_ossl.o ecs_sign.o ecs_vrf.o


#engine path
C_OBJECTS  += eng_all.o eng_cnf.o eng_cryptodev.o eng_ctrl.o eng_dyn.o eng_err.o eng_fat.o eng_init.o eng_lib.o
C_OBJECTS  += eng_list.o eng_openssl.o eng_pkey.o eng_rdrand.o eng_rsax.o eng_table.o tb_asnmth.o tb_cipher.o tb_dh.o tb_digest.o
C_OBJECTS  += tb_dsa.o tb_ecdh.o tb_ecdsa.o tb_pkmeth.o tb_rand.o tb_rsa.o tb_store.o


#engine path
#C_OBJECTS  += err_all.o 
C_OBJECTS  += err.o err_prn.o


#evp path
#C_OBJECTS  += e_dsa.o 
C_OBJECTS  += p5_crpt2.o
C_OBJECTS  += bio_b64.o bio_enc.o bio_md.o bio_ok.o c_all.o c_allc.o c_alld.o digest.o encode.o evp_acnf.o evp_cnf.o evp_enc.o
C_OBJECTS  += evp_err.o evp_fips.o evp_key.o evp_lib.o evp_pkey.o e_aes.o e_aes_cbc_hmac_sha1.o e_bf.o evp_pbe.o
C_OBJECTS  += e_camellia.o e_cast.o e_des.o e_des3.o e_idea.o e_null.o e_old.o e_rc2.o e_rc4.o e_rc4_hmac_md5.o e_rc5.o
C_OBJECTS  += e_seed.o e_xcbc_d.o m_dss.o m_dss1.o m_ecdsa.o m_md2.o m_md4.o m_md5.o m_mdc2.o m_null.o m_ripemd.o m_sha.o m_sha1.o
C_OBJECTS  += m_sigver.o m_wp.o names.o openbsd_hw.o p5_crpt.o pmeth_fn.o pmeth_gn.o pmeth_lib.o p_dec.o p_enc.o p_lib.o
C_OBJECTS  += p_open.o p_seal.o p_sign.o p_verify.o


#hmac path
C_OBJECTS  += hmac.o hm_ameth.o hm_pmeth.o


#idea path
C_OBJECTS  += i_cbc.o i_cfb64.o i_ecb.o i_ofb64.o i_skey.o


#jpake path
#C_OBJECTS  += jpake.o jpake_err.o


#krb5 path
C_OBJECTS  += krb5_asn.o


#lhash path
C_OBJECTS  += lhash.o lh_stats.o


#md2 path
C_OBJECTS  += md2_dgst.o md2_one.o


#md4 path
C_OBJECTS  += md4_dgst.o md4_one.o


#md5 path
C_OBJECTS  += md5_dgst.o md5_one.o


#mdc2 path
C_OBJECTS  += mdc2_one.o


#modes path
C_OBJECTS  += cbc128.o ccm128.o cfb128.o ctr128.o ofb128.o xts128.o


#objects path
C_OBJECTS  +=  obj_xref.o obj_dat.o obj_err.o obj_lib.o o_names.o


#ocsp path
C_OBJECTS  += ocsp_asn.o ocsp_cl.o ocsp_err.o ocsp_ext.o ocsp_ht.o ocsp_lib.o ocsp_prn.o ocsp_srv.o ocsp_vfy.o


#pem path
C_OBJECTS  += pem_all.o pem_err.o pem_info.o pem_lib.o pem_oth.o pem_pk8.o pem_pkey.o pem_seal.o pem_sign.o pem_x509.o pem_xaux.o pvkfmt.o


#pkcs7 path
#C_OBJECTS  += bio_ber.o
#C_OBJECTS  += bio_pk7.o example.o pk7_asn1.o pk7_attr.o pk7_dgst.o
#C_OBJECTS  += pk7_doit.o pk7_enc.o pk7_mime.o pk7_smime.o pkcs7err.o
C_OBJECTS  += pk7_lib.o


#pkcs12 path
#C_OBJECTS  += p12_add.o p12_asn.o p12_attr.o p12_crpt.o p12_decr.o p12_init.o 
#C_OBJECTS  += p12_kiss.o p12_mutl.o p12_npas.o p12_p8d.o p12_p8e.o pk12err.o p12_utl.o
#C_OBJECTS  += p12_crpt.o p12_key.o


#pqueue path
C_OBJECTS  += pqueue.o


#rand path
#C_OBJECTS  += rand_egd.o rand_nw.o rand_os2.o rand_vms.o rand_win.o
C_OBJECTS  += md_rand.o randfile.o rand_err.o rand_lib.o rand_unix.o


#rc2 path
C_OBJECTS  += rc2cfb64.o rc2ofb64.o rc2_cbc.o rc2_ecb.o rc2_skey.o


#rc4 path
C_OBJECTS  += rc4_enc.o rc4_skey.o rc4_utl.o


#rc5 path
C_OBJECTS  += rc5cfb64.o rc5ofb64.o rc5_ecb.o rc5_enc.o rc5_skey.o


#ripemd path
C_OBJECTS  += rmd_dgst.o rmd_one.o


#rsa path
C_OBJECTS  += rsa_ameth.o rsa_asn1.o rsa_chk.o rsa_crpt.o rsa_depr.o rsa_eay.o rsa_err.o rsa_gen.o rsa_lib.o rsa_none.o
C_OBJECTS  += rsa_null.o rsa_oaep.o rsa_pk1.o rsa_pmeth.o rsa_prn.o rsa_pss.o rsa_saos.o rsa_sign.o rsa_ssl.o rsa_x931.o


#seed path
C_OBJECTS  += seed.o seed_cbc.o seed_cfb.o seed_ecb.o seed_ofb.o


#sha path
C_OBJECTS  += sha1dgst.o sha1_one.o sha256.o sha256t.o sha512.o sha512t.o sha_dgst.o sha_one.o


#srp path
C_OBJECTS  += srp_lib.o srp_vfy.o


#stack path
C_OBJECTS  += stack.o


#store path
#C_OBJECTS  += str_err.o
#C_OBJECTS  += str_lib.o str_mem.o str_meth.o


#threads path
#C_OBJECTS  += th-lock.o


#ts path
C_OBJECTS  += ts_asn1.o ts_conf.o ts_err.o ts_lib.o ts_req_print.o ts_req_utils.o ts_rsp_print.o ts_rsp_sign.o
C_OBJECTS  += ts_rsp_utils.o ts_rsp_verify.o ts_verify_ctx.o


#txt_db path
C_OBJECTS  += txt_db.o


#ui path
C_OBJECTS  += ui_openssl.o 
C_OBJECTS  += ui_compat.o ui_err.o ui_lib.o ui_util.o


#whrlpool path
C_OBJECTS  += wp_block.o wp_dgst.o


#x509 path
C_OBJECTS  += by_dir.o by_file.o x509cset.o x509name.o x509rset.o x509spki.o x509type.o x509_att.o x509_cmp.o x509_d2.o
C_OBJECTS  += x509_def.o x509_err.o x509_ext.o x509_lu.o x509_obj.o x509_r2x.o x509_req.o x509_set.o x509_trs.o x509_txt.o
C_OBJECTS  += x509_v3.o x509_vfy.o x509_vpm.o x_all.o


#x509v3 path
C_OBJECTS  += pcy_cache.o pcy_data.o pcy_lib.o pcy_map.o pcy_node.o pcy_tree.o v3err.o
C_OBJECTS  += v3_addr.o v3_akey.o v3_akeya.o v3_alt.o v3_asid.o v3_bcons.o v3_bitst.o v3_conf.o v3_cpols.o v3_crld.o
C_OBJECTS  += v3_enum.o v3_extku.o v3_genn.o v3_ia5.o v3_info.o v3_int.o v3_lib.o v3_ncons.o v3_ocsp.o v3_pci.o v3_pcia.o
C_OBJECTS  += v3_pcons.o v3_pku.o v3_pmaps.o v3_prn.o v3_purp.o v3_skey.o v3_sxnet.o v3_utl.o


#crypto path
#C_OBJECTS  += armcap.o cversion.o LPdir_nyi.o LPdir_unix.o LPdir_vms.o LPdir_win.o LPdir_win32.o LPdir_wince.o o_dir.o 
#C_OBJECTS  += o_str.o ppccap.o s390xcap.o sparcv9cap.o uid.o libc_api.o
#C_OBJECTS  += cpt_err.o cryptlib.o ebcdic.o ex_data.o fips_ers.o mem_dbg.o
C_OBJECTS  += mem.o mem_clr.o  o_fips.o o_init.o 
C_OBJECTS  += o_time.o 


OUTPUT := $(BIN)/$(OUTPUT)


C_OBJECTS_DDR = $(addprefix $(OBJ)/, $(C_OBJECTS))


all: $(C_OBJECTS_DDR)
$(AR) -r $(OUTPUT) $^


$(C_OBJECTS_DDR): $(OBJ)/%.o: %.c 
$(CC) $(CFLAGS) -c -o $@ $<


clean:
-rm -f $(OBJ)/*.* $(BIN)/*.*


0 0
原创粉丝点击